Config::Any->load_files( { files => \@files } );
Config::Any->load_files( { files => \@files, filter => \&filter } );
Config::Any->load_files( { files => \@files, use_ext => 1 } );
+ Config::Any->load_files( { files => \@files, flatten_to_hash => 1 } );
C<load_files()> attempts to load configuration from the list of files passed in
the C<files> parameter, if the file exists.
containing YAML data will not be offered to the YAML plugin, whereas C<myapp.yml>
or C<myapp.yaml> would be.
+When the C<flatten_to_hash> parameter is defined, the loader will return a hash
+keyed on the file names, as opposed to the usual list of single-key hashes.
+
C<load_files()> also supports a 'force_plugins' parameter, whose value should be an
arrayref of plugin names like C<Config::Any::INI>. Its intended use is to allow the use
of a non-standard file extension while forcing it to be offered to a particular parser.
Config::Any->load_stems( { stems => \@stems } );
Config::Any->load_stems( { stems => \@stems, filter => \&filter } );
Config::Any->load_stems( { stems => \@stems, use_ext => 1 } );
+ Config::Any->load_stems( { stems => \@stems, flatten_to_hash => 1 } );
C<load_stems()> attempts to load configuration from a list of files which it generates
by combining the filename stems list passed in the C<stems> parameter with the
}
}
+ if ( defined $args->{ flatten_to_hash } ) {
+ my %flattened = map { %$_ } @results;
+ return \%flattened;
+ }
+
return \@results;
}
$|++;
-use Test::More tests => 10;
+use Test::More tests => 14;
use Scalar::Util qw(blessed reftype);
use Config::Any;
our $cfg_file = 't/conf/conf.foo';
eval { Config::Any::INI->load( $cfg_file ); };
+
SKIP: {
- skip "File loading backend for INI not found", 10 if $@;
+ skip "File loading backend for INI not found", 14 if $@;
+
+ my $struct; # used to make sure parsing works for arrays and hashes
- ok( my $c_arr = Config::Any->load_files(
+ # force_plugins
+ {
+ my $result = Config::Any->load_files(
{ files => [ $cfg_file ],
force_plugins => [ qw(Config::Any::INI) ]
}
- ),
- "load file with parser forced"
- );
+ );
- ok( my $c = $c_arr->[ 0 ], "load_files returns an arrayref" );
+ ok( $result, 'load file with parser forced' );
- ok( ref $c, "load_files arrayref contains a ref" );
- my $ref = blessed $c ? reftype $c : ref $c;
- is( substr( $ref, 0, 4 ), "HASH", "hashref" );
+ ok( my $first = $result->[ 0 ], 'load_files returns an arrayref' );
+ ok( ref $first, 'load_files arrayref contains a ref' );
- my ( $name, $cfg ) = each %$c;
- is( $name, $cfg_file, "filename matches" );
+ my $ref = blessed $first ? reftype $first : ref $first;
+ is( substr( $ref, 0, 4 ), 'HASH', 'hashref' );
- my $cfgref = blessed $cfg ? reftype $cfg : ref $cfg;
- is( substr( $cfgref, 0, 4 ), "HASH", "hashref cfg" );
+ $struct = $first;
- is( $cfg->{ name }, 'TestApp', "appname parses" );
- is( $cfg->{ Component }{ "Controller::Foo" }->{ foo },
- 'bar', "component->cntrlr->foo = bar" );
- is( $cfg->{ Model }{ "Model::Baz" }->{ qux },
- 'xyzzy', "model->model::baz->qux = xyzzy" );
+ my ( $name, $cfg ) = %$first;
+ is( $name, $cfg_file, 'filenames match' );
- ok( my $c_arr_2 = Config::Any->load_files(
- { files => [ $cfg_file ],
- force_plugins => [ qw(Config::Any::INI) ],
- use_ext => 1
+ my $cfgref = blessed $cfg ? reftype $cfg : ref $cfg;
+ is( substr( $cfgref, 0, 4 ), 'HASH', 'hashref cfg' );
+
+ is( $cfg->{ name }, 'TestApp', 'appname parses' );
+ is( $cfg->{ Component }{ "Controller::Foo" }->{ foo },
+ 'bar', 'component->cntrlr->foo = bar' );
+ is( $cfg->{ Model }{ "Model::Baz" }->{ qux },
+ 'xyzzy', 'model->model::baz->qux = xyzzy' );
+ }
+
+ # flatten_to_hash
+ {
+ my $result = Config::Any->load_files(
+ { files => [ $cfg_file ],
+ force_plugins => [ qw(Config::Any::INI) ],
+ flatten_to_hash => 1
}
- ),
- "load file with parser forced"
- );
+ );
+
+ ok( $result, 'load file with parser forced, flatten to hash' );
+ ok( ref $result, 'load_files hashref contains a ref' );
+
+ my $ref = blessed $result ? reftype $result : ref $result;
+ is( substr( $ref, 0, 4 ), 'HASH', 'hashref' );
+
+ is_deeply( $result, $struct, 'load_files return an hashref (flatten_to_hash)' );
+ }
+
+ # use_ext
+ {
+ ok( my $result = Config::Any->load_files(
+ { files => [ $cfg_file ],
+ force_plugins => [ qw(Config::Any::INI) ],
+ use_ext => 1
+ }
+ ),
+ "load file with parser forced"
+ );
+ }
}