File Coverage

lib/Net/ISC/DHCPd/Config/Key.pm
Criterion Covered Total %
statement 13 13 100.0
branch 8 10 80.0
condition n/a
subroutine 6 6 100.0
pod 5 5 100.0
total 32 34 94.1


line stmt bran cond sub pod time code
1             package Net::ISC::DHCPd::Config::Key;
2              
3             =head1 NAME
4              
5             Net::ISC::DHCPd::Config::Key - Server key
6              
7             =head1 DESCRIPTION
8              
9             See L<Net::ISC::DHCPd::Config::Role> for methods and attributes without
10             documentation.
11              
12             An instance from this class, comes from / will produce the block below:
13              
14             $name_attribute_value $value_attribute_value;
15              
16             key "$name" {
17             algorithm $algorithm;
18             secret "$secret";
19             };
20              
21             =head1 SYNOPSIS
22              
23             See L<Net::ISC::DHCPd::Config/SYNOPSIS>.
24              
25             =cut
26              
27 24     24   22836 use Moose;
  24         54  
  24         203  
28              
29             with 'Net::ISC::DHCPd::Config::Role';
30              
31             =head1 ATTRIBUTES
32              
33             =head2 name
34              
35             Name of the key - See L</DESCRIPTION> for details.
36              
37             =head2 algorithm
38              
39             =head2 secret
40              
41             =cut
42              
43             has [qw/ name algorithm secret /] => (
44             is => 'rw', # TODO: WILL PROBABLY CHANGE!
45             isa => 'Str',
46             );
47              
48             =head2 regex
49              
50             See L<Net::ISC::DHCPd::Config::Role/regex>.
51              
52             =cut
53              
54 48     48 1 362 sub regex { qr{^\s* key \s+ ("?)(\S+)(\1) }x }
55              
56             =head2 children
57              
58             Modules with slurp need this special children variable to trick the parser
59             into recursively processing them.
60              
61             =cut
62              
63 4     4 1 31 sub children { [undef] }
64              
65              
66             =head1 METHODS
67              
68             =head2 slurp
69              
70             This method is used by L<Net::ISC::DHCPd::Config::Role/parse>, and will
71             slurp the content of the function, instead of trying to parse the
72             statements.
73              
74             =cut
75              
76             sub slurp {
77 13     13 1 27 my($self, $line) = @_;
78              
79 13 100       46 return 'last' if($line =~ /^\s*}/);
80 9 100       187 $self->algorithm($1) if($line =~ /algorithm \s+ (\S+);/x);
81 9 100       166 $self->secret($2) if($line =~ /secret \s+ ("?)(\S+)\1;/x);
82 9         27 return 'next';
83             }
84              
85             =head2 captured_to_args
86              
87             See L<Net::ISC::DHCPd::Config::Role/captured_to_args>.
88              
89             =cut
90              
91             sub captured_to_args {
92 4     4 1 18 return { name => $_[1] }; # $_[0] == quote or empty string
93             }
94              
95             =head2 generate
96              
97             See L<Net::ISC::DHCPd::Config::Role/generate>.
98              
99             =cut
100              
101             sub generate {
102 1     1 1 2 my $self = shift;
103              
104             return(
105 1 50       31 sprintf('key "%s" {', $self->name),
    50          
106             $self->algorithm ? (sprintf ' algorithm %s;', $self->algorithm) : (),
107             $self->secret ? (sprintf ' secret "%s";', $self->secret) : (),
108             '};', # semicolon is for compatibility with bind key files
109             );
110             }
111              
112             =head1 COPYRIGHT & LICENSE
113              
114             =head1 AUTHOR
115              
116             See L<Net::ISC::DHCPd>.
117              
118             =cut
119             __PACKAGE__->meta->make_immutable;
120             1;