File Coverage

blib/lib/Enbld/App/Configuration.pm
Criterion Covered Total %
statement 83 83 100.0
branch 10 10 100.0
condition n/a
subroutine 18 18 100.0
pod 0 12 0.0
total 111 123 90.2


line stmt bran cond sub pod time code
1             package Enbld::App::Configuration;
2              
3 3     3   537 use strict;
  3         3  
  3         73  
4 3     3   8 use warnings;
  3         5  
  3         63  
5              
6 3     3   8 use File::Spec;
  3         3  
  3         46  
7 3     3   867 use autodie;
  3         23045  
  3         12  
8 3     3   10431 use Carp;
  3         4  
  3         2380  
9              
10             our $envname = 'myenv';
11              
12             our $config_ref;
13             our $rcfile_ref;
14              
15             our $CONFIGURATIONFILE;
16              
17             our $dirty;
18              
19             sub is_dirty {
20 3     3 0 7 return $dirty;
21             }
22              
23             sub config {
24 1     1 0 3 return $config_ref;
25             }
26              
27             sub rcfile {
28 1     1 0 3 return $rcfile_ref;
29             }
30              
31             # method for only test.
32             sub destroy {
33 37     37 0 6192 undef $CONFIGURATIONFILE;
34            
35 37         78 undef $envname;
36 37         49 undef $dirty;
37              
38 37         66 undef $config_ref;
39 37         108 undef $rcfile_ref;
40             }
41              
42             sub _configuration_file_path {
43 6     6   29 require Enbld::Home;
44            
45 6         49 return File::Spec->catfile( Enbld::Home->conf, 'enbld.conf' );
46             }
47              
48             sub read_file {
49 4     4 0 56 my $pkg = shift;
50              
51 4         11 my $path = _configuration_file_path();
52              
53 4 100       84 return if ( ! -e $path );
54              
55 2         8 open my $fh, '<', $path;
56 2         130 my $str = do { local $/; <$fh> };
  2         6  
  2         28  
57 2         4 close $fh;
58              
59 2         212 eval $str;
60              
61 2         8 $envname = $CONFIGURATIONFILE->{envname};
62              
63 2         9 require Enbld::Config;
64 2         3 foreach my $name ( keys %{ $CONFIGURATIONFILE->{config} } ) {
  2         8  
65             $config_ref->{$name} =
66 1         1 Enbld::Config->new( %{ $CONFIGURATIONFILE->{config}{$name} } );
  1         6  
67             }
68              
69 2         325 require Enbld::RcFile;
70 2         3 foreach my $filename ( keys %{ $CONFIGURATIONFILE->{rcfile} } ) {
  2         8  
71             $rcfile_ref->{$filename} =
72 1         2 Enbld::RcFile->new( %{ $CONFIGURATIONFILE->{rcfile}{$filename} });
  1         7  
73             }
74              
75 2         9 return $envname;
76             }
77              
78             sub write_file {
79            
80 4     4 0 49 require Enbld::Feature;
81 4 100       18 return if Enbld::Feature->is_deploy_mode;
82              
83 3 100       7 return unless is_dirty();
84              
85 2         14 $CONFIGURATIONFILE = {
86             envname => $envname,
87             config => {},
88             rcfile => {},
89             format => 'v2.0', # for future...configuration format version.
90             };
91              
92 2         3 foreach my $name ( keys %{ $config_ref } ) {
  2         8  
93 1         3 $CONFIGURATIONFILE->{config}{$name} = $config_ref->{$name}->serialize;
94             }
95              
96 2         3 foreach my $filename ( keys %{ $rcfile_ref } ) {
  2         9  
97             $CONFIGURATIONFILE->{rcfile}{$filename} =
98 1         7 $rcfile_ref->{$filename}->serialize;
99             }
100              
101 2         5 my $path = _configuration_file_path();
102              
103 2         7 require Data::Dumper;
104 2         8 open my $fh, '>', $path;
105 2         1478 my $dump = Data::Dumper->new(
106             [ $CONFIGURATIONFILE ],
107             [ 'Enbld::App::Configuration::CONFIGURATIONFILE' ]
108             );
109 2         77 print $fh $dump->Dump;
110 2         166 close $fh;
111              
112 2         735 return $envname;
113             }
114              
115             sub set_config {
116 7     7 0 45 my ( $pkg, $config ) = @_;
117              
118 7         22 my $name = $config->name;
119 7         22 $config_ref->{$name} = $config;
120              
121 7         21 $dirty++;
122              
123 7         19 return $config->name;
124             }
125              
126             sub set_rcfile {
127 2     2 0 16 my ( $pkg, $rcfile ) = @_;
128              
129 2         7 my $filename = $rcfile->filename;
130 2         5 $rcfile_ref->{$filename} = $rcfile;
131              
132 2         3 $dirty++;
133              
134 2         6 return $rcfile->filename;
135             }
136              
137             sub search_config {
138 9     9 0 853 my ( $pkg, $name ) = @_;
139              
140 9 100       47 return $config_ref->{$name} if ( exists $config_ref->{$name} );
141 3         8 return;
142             }
143              
144             sub search_rcfile {
145 3     3 0 822 my ( $pkg, $filename ) = @_;
146              
147 3 100       11 return $rcfile_ref->{$filename} if ( exists $rcfile_ref->{$filename} );
148 1         3 return;
149             }
150              
151             sub envname {
152 1     1 0 5 return $envname;
153             }
154              
155             sub set_envname {
156 1     1 0 436 my ( $pkg, $name ) = @_;
157              
158 1         2 $envname = $name;
159              
160 1         2 return $envname;
161             }
162              
163             1;
164