@@ -4,7 +4,7 @@ use 5.008000;
4
4
use strict;
5
5
use warnings;
6
6
7
- our $VERSION = ' 0.14 ' ;
7
+ our $VERSION = ' 0.15_01 ' ;
8
8
9
9
use File::Spec;
10
10
use YAML::XS qw( LoadFile ) ;
@@ -57,8 +57,9 @@ sub new {
57
57
? $params {interpolate_variables } : 1;
58
58
$self -> {process_directives } = exists $params {process_directives }
59
59
? $params {process_directives } : 1;
60
+ $self -> {export_env } = $params {export_env };
60
61
61
- $self -> {_hash_merge } = Hash::Merge-> new( ' CONFIG_PRECEDENT' );
62
+ $self -> {_merger } = Hash::Merge-> new(' CONFIG_PRECEDENT' );
62
63
$self -> {_config } = undef ;
63
64
$self -> {_vars } = {};
64
65
$self -> {_seen_nodes } = {};
@@ -69,7 +70,9 @@ sub new {
69
70
{
70
71
no strict ' refs' ;
71
72
72
- foreach my $name ( qw( interpolate_variables process_directives ) ) {
73
+ foreach my $name (
74
+ qw( interpolate_variables process_directives export_env ) )
75
+ {
73
76
*{$name } = sub {
74
77
my $self = shift ;
75
78
@@ -83,10 +86,14 @@ sub new {
83
86
}
84
87
85
88
sub load {
86
- my $self = shift ;
89
+ my $self = shift ;
87
90
my @config_sections = @_ ;
88
91
89
92
$self -> {_config } = $self -> _build_tree(@config_sections );
93
+ if ( $self -> {export_env } ) {
94
+ $self -> {_config } = $self -> {_merger }-> merge( $self -> {_config },
95
+ { ENV => {%ENV } } );
96
+ }
90
97
$self -> _process_tree( $self -> {_config } );
91
98
92
99
$self -> {_vars } = {};
@@ -96,7 +103,7 @@ sub load {
96
103
}
97
104
98
105
sub _build_tree {
99
- my $self = shift ;
106
+ my $self = shift ;
100
107
my @config_sections = @_ ;
101
108
102
109
my $config = {};
@@ -105,7 +112,7 @@ sub _build_tree {
105
112
next unless defined $config_section ;
106
113
107
114
if ( ref ($config_section ) eq ' HASH' ) {
108
- $config = $self -> {_hash_merge }-> merge( $config , $config_section );
115
+ $config = $self -> {_merger }-> merge( $config , $config_section );
109
116
}
110
117
else {
111
118
my %not_found_idx ;
@@ -138,16 +145,16 @@ sub _build_tree {
138
145
next ;
139
146
}
140
147
141
- my $method = " _load_${file_type} _file" ;
142
148
my @data = eval {
149
+ my $method = " _load_$file_type " ;
143
150
return $self -> $method ($file_path );
144
151
};
145
152
if ($@ ) {
146
153
croak " Can't parse $file_path \n $@ " ;
147
154
}
148
155
149
156
foreach my $data_chunk (@data ) {
150
- $config = $self -> {_hash_merge }-> merge( $config , $data_chunk );
157
+ $config = $self -> {_merger }-> merge( $config , $data_chunk );
151
158
}
152
159
}
153
160
}
@@ -167,14 +174,14 @@ sub _build_tree {
167
174
return $config ;
168
175
}
169
176
170
- sub _load_yaml_file {
177
+ sub _load_yaml {
171
178
my $self = shift ;
172
179
my $file_path = shift ;
173
180
174
181
return LoadFile($file_path );
175
182
}
176
183
177
- sub _load_json_file {
184
+ sub _load_json {
178
185
my $self = shift ;
179
186
my $file_path = shift ;
180
187
@@ -231,13 +238,13 @@ sub _process_node {
231
238
if ( defined $node -> {underlay } ) {
232
239
my $layer = delete $node -> {underlay };
233
240
$layer = $self -> _process_layer($layer );
234
- $node = $self -> {_hash_merge }-> merge( $layer , $node );
241
+ $node = $self -> {_merger }-> merge( $layer , $node );
235
242
}
236
243
237
244
if ( defined $node -> {overlay } ) {
238
245
my $layer = delete $node -> {overlay };
239
246
$layer = $self -> _process_layer($layer );
240
- $node = $self -> {_hash_merge }-> merge( $node , $layer );
247
+ $node = $self -> {_merger }-> merge( $node , $layer );
241
248
}
242
249
}
243
250
}
@@ -257,7 +264,7 @@ sub _process_layer {
257
264
258
265
foreach my $node ( @{$layer } ) {
259
266
$node = $self -> _process_node( $node );
260
- $new_layer = $self -> {_hash_merge }-> merge( $new_layer , $node );
267
+ $new_layer = $self -> {_merger }-> merge( $new_layer , $node );
261
268
}
262
269
263
270
$layer = $new_layer ;
@@ -278,7 +285,7 @@ sub _resolve_var {
278
285
279
286
my $value ;
280
287
281
- while ( 1 ) {
288
+ while (1 ) {
282
289
my $token = shift @tokens ;
283
290
284
291
if ( ref ($pointer ) eq ' HASH' ) {
@@ -397,6 +404,10 @@ Enables or disables variable interpolation. Enabled by default.
397
404
398
405
Enables or disables directive processing. Enabled by default.
399
406
407
+ =item export_env
408
+
409
+ TODO
410
+
400
411
=back
401
412
402
413
=head1 METHODS
0 commit comments