File Coverage

blib/lib/Net/Autoconfig/Template.pm
Criterion Covered Total %
statement 41 45 91.1
branch 0 2 0.0
condition 1 5 20.0
subroutine 12 12 100.0
pod n/a
total 54 64 84.3


line stmt bran cond sub pod time code
1             package Net::Autoconfig::Template;
2              
3 6     6   25281 use 5.008008;
  6         24  
  6         300  
4 6     6   36 use strict;
  6         15  
  6         208  
5 6     6   29 use warnings;
  6         12  
  6         327  
6              
7 6     6   43 use base "Net::Autoconfig";
  6         32  
  6         1461  
8 6     6   38 use Log::Log4perl qw(:levels);
  6         12  
  6         43  
9 6     6   23363 use Data::Dumper;
  6         56288  
  6         598  
10 6     6   4430 use version; our $VERSION = version->new('v1.1.3');
  6         9571  
  6         43  
11              
12             #################################################################################
13             ## Constants and Global Variables
14             #################################################################################
15              
16 6     6   779 use constant TRUE => 1;
  6         13  
  6         391  
17 6     6   32 use constant FALSE => 0;
  6         12  
  6         362  
18 6     6   35 use constant DEFAULT_TIMEOUT => 10;
  6         12  
  6         2632  
19              
20 6         6186 use constant DEFAULT_CMD => {
21             cmd => "",
22             regex => "",
23             timeout => DEFAULT_TIMEOUT,
24             required => TRUE,
25 6     6   43 };
  6         13  
26              
27             # directives = keywords that the parser looks for. The corresponding hash value
28             # is the regex to use to look for corresponding data.
29             my $file_directives = {
30             cmd => '.+',
31             'wait' => '\d+',
32             regex => '.*',
33             default => '',
34             required => '',
35             optional => '',
36             device => '\w+',
37             host => '\w+',
38             hostname => '\w+',
39             end => '',
40             };
41              
42              
43              
44             #################################################################################
45             # Methods
46             #################################################################################
47              
48             ############################################################
49             # Public Methods
50             ############################################################
51              
52             ########################################
53             # new
54             # public method
55             #
56             # create a new Net::Autoconfig::Template
57             #
58             # Takes a filename
59             #
60             # Returns:
61             # a Net::Autoconfig::Template object
62             ########################################
63             sub new {
64 1     1   28 my $invocant = shift; # calling class
65 1         3 my $filename = shift;
66 1   33     10 my $class = ref($invocant) || $invocant;
67 1         4 my $self = {};
68 1         14 my $log = Log::Log4perl->get_logger('Net::Autoconfig');
69 1         48 my $template_data; # a hash ref to the template data from the file
70              
71 1         6 $log->debug("Creating new template object");
72 1         361 $template_data = _get_template_data($filename);
73 0   0       $self = $template_data || {};
74              
75 0 0         if ($log->is_trace())
76             {
77 0           $log->info(Dumper($template_data));
78             }
79              
80 0           return bless $self, $class;
81             }
82              
83             ############################################################
84             # Private Methods
85             ############################################################
86              
87             ########################################
88             # _get_template_data
89             # private method
90             #
91             # Load the file and extract data from it.
92             # Returns:
93             # array context => a hash of the template data
94             # scalar context => a hash ref of the template data
95             # failure => undef
96             ########################################
97             sub _get_template_data {
98             my $filename = shift;
99             my $template_data = {};
100             my $log = Log::Log4perl->get_logger("Net::Autoconfig");
101             my $current_device; # the name of the current device
102             my $set_defaults_flag; # set if we've seen a "default" directive
103             my $skip_push_cmd; # flag indicates if we shouldn't push this to the list of commands
104              
105             $filename or return;
106              
107             eval
108             {
109             open(TEMPLATE, "<$filename") || die "Could not open '$filename' for reading: $!";
110             };
111             if ($@)
112             {
113             $log->warn("Loading Template - $@");
114             return;
115             }
116              
117             $template_data->{default} = DEFAULT_CMD;
118              
119             while (my $line =