Skip to content

Commit 62b1720

Browse files
committed
Added export of environment variables
1 parent 8cfbae4 commit 62b1720

File tree

4 files changed

+28
-15
lines changed

4 files changed

+28
-15
lines changed

README

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Config-Processor version 0.14
1+
Config-Processor version 0.15_01
22
=============================
33

44
INSTALLATION

examples/etc/dirs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ myapp:
33

44
dirs:
55
root_dir: "/myapp"
6+
home_dir: "${ENV.HOME}"
67
templates_dir: "${myapp.dirs.root_dir}/templates"
78
sessions_dir: "${myapp.dirs.root_dir}/sessions"
89
media_dirs:

examples/example.pl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
my $config_processor = Config::Processor->new(
1010
dirs => [ qw( examples/etc ) ],
11+
export_env => 1,
1112
);
1213

1314
# Load all configuration sections

lib/Config/Processor.pm

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use 5.008000;
44
use strict;
55
use warnings;
66

7-
our $VERSION = '0.14';
7+
our $VERSION = '0.15_01';
88

99
use File::Spec;
1010
use YAML::XS qw( LoadFile );
@@ -57,8 +57,9 @@ sub new {
5757
? $params{interpolate_variables} : 1;
5858
$self->{process_directives} = exists $params{process_directives}
5959
? $params{process_directives} : 1;
60+
$self->{export_env} = $params{export_env};
6061

61-
$self->{_hash_merge} = Hash::Merge->new( 'CONFIG_PRECEDENT' );
62+
$self->{_merger} = Hash::Merge->new('CONFIG_PRECEDENT');
6263
$self->{_config} = undef;
6364
$self->{_vars} = {};
6465
$self->{_seen_nodes} = {};
@@ -69,7 +70,9 @@ sub new {
6970
{
7071
no strict 'refs';
7172

72-
foreach my $name ( qw( interpolate_variables process_directives ) ) {
73+
foreach my $name (
74+
qw( interpolate_variables process_directives export_env ) )
75+
{
7376
*{$name} = sub {
7477
my $self = shift;
7578

@@ -83,10 +86,14 @@ sub new {
8386
}
8487

8588
sub load {
86-
my $self = shift;
89+
my $self = shift;
8790
my @config_sections = @_;
8891

8992
$self->{_config} = $self->_build_tree(@config_sections);
93+
if ( $self->{export_env} ) {
94+
$self->{_config} = $self->{_merger}->merge( $self->{_config},
95+
{ ENV => {%ENV} } );
96+
}
9097
$self->_process_tree( $self->{_config} );
9198

9299
$self->{_vars} = {};
@@ -96,7 +103,7 @@ sub load {
96103
}
97104

98105
sub _build_tree {
99-
my $self = shift;
106+
my $self = shift;
100107
my @config_sections = @_;
101108

102109
my $config = {};
@@ -105,7 +112,7 @@ sub _build_tree {
105112
next unless defined $config_section;
106113

107114
if ( ref($config_section) eq 'HASH' ) {
108-
$config = $self->{_hash_merge}->merge( $config, $config_section );
115+
$config = $self->{_merger}->merge( $config, $config_section );
109116
}
110117
else {
111118
my %not_found_idx;
@@ -138,16 +145,16 @@ sub _build_tree {
138145
next;
139146
}
140147

141-
my $method = "_load_${file_type}_file";
142148
my @data = eval {
149+
my $method = "_load_$file_type";
143150
return $self->$method($file_path);
144151
};
145152
if ($@) {
146153
croak "Can't parse $file_path\n$@";
147154
}
148155

149156
foreach my $data_chunk (@data) {
150-
$config = $self->{_hash_merge}->merge( $config, $data_chunk );
157+
$config = $self->{_merger}->merge( $config, $data_chunk );
151158
}
152159
}
153160
}
@@ -167,14 +174,14 @@ sub _build_tree {
167174
return $config;
168175
}
169176

170-
sub _load_yaml_file {
177+
sub _load_yaml {
171178
my $self = shift;
172179
my $file_path = shift;
173180

174181
return LoadFile($file_path);
175182
}
176183

177-
sub _load_json_file {
184+
sub _load_json {
178185
my $self = shift;
179186
my $file_path = shift;
180187

@@ -231,13 +238,13 @@ sub _process_node {
231238
if ( defined $node->{underlay} ) {
232239
my $layer = delete $node->{underlay};
233240
$layer = $self->_process_layer($layer);
234-
$node = $self->{_hash_merge}->merge( $layer, $node );
241+
$node = $self->{_merger}->merge( $layer, $node );
235242
}
236243

237244
if ( defined $node->{overlay} ) {
238245
my $layer = delete $node->{overlay};
239246
$layer = $self->_process_layer($layer);
240-
$node = $self->{_hash_merge}->merge( $node, $layer );
247+
$node = $self->{_merger}->merge( $node, $layer );
241248
}
242249
}
243250
}
@@ -257,7 +264,7 @@ sub _process_layer {
257264

258265
foreach my $node ( @{$layer} ) {
259266
$node = $self->_process_node( $node );
260-
$new_layer = $self->{_hash_merge}->merge( $new_layer, $node );
267+
$new_layer = $self->{_merger}->merge( $new_layer, $node );
261268
}
262269

263270
$layer = $new_layer;
@@ -278,7 +285,7 @@ sub _resolve_var {
278285

279286
my $value;
280287

281-
while ( 1 ) {
288+
while (1) {
282289
my $token = shift @tokens;
283290

284291
if ( ref($pointer) eq 'HASH' ) {
@@ -397,6 +404,10 @@ Enables or disables variable interpolation. Enabled by default.
397404
398405
Enables or disables directive processing. Enabled by default.
399406
407+
=item export_env
408+
409+
TODO
410+
400411
=back
401412
402413
=head1 METHODS

0 commit comments

Comments
 (0)