my
$test_dir
= tempdir();
write_file(
"$test_dir/base.yaml"
,
<<'YAML');
database:
user: base_user
pass: base_pass
YAML
write_file(
"$test_dir/local.json"
,
<<'JSON');
{
"database": {
"pass": "local_pass"
},
"feature": {
"enabled": true
}
}
JSON
write_file(
"$test_dir/base.xml"
,
<<'XML');
<config>
<api>
<timeout>30</timeout>
</api>
</config>
XML
write_file(
"$test_dir/local.xml"
,
<<'XML');
<config>
<api>
<timeout>60</timeout>
</api>
</config>
XML
write_file(
"$test_dir/base.ini"
,
<<'INI');
[logging]
level=info
file=logfile.log
INI
write_file(
"$test_dir/local.ini"
,
<<'INI');
[logging]
level=debug
INI
local
%ENV
;
$ENV
{APP_DATABASE__USER} =
'env_user'
;
$ENV
{APP_EXTRA__DEBUG} =
'1'
;
my
$config
= Config::Abstraction->new(
config_dirs
=> [
$test_dir
],
env_prefix
=>
'APP_'
,
flatten
=> 0,
);
is
$config
->get(
'database.user'
),
'env_user'
,
'ENV override on database.user'
;
is
$config
->get(
'database.pass'
),
'local_pass'
,
'local.json overrides base.yaml'
;
ok
$config
->get(
'feature.enabled'
),
'feature.enabled from JSON'
;
is
$config
->get(
'extra.debug'
),
'1'
,
'extra.debug from ENV'
;
is
$config
->get(
'api.timeout'
),
'60'
,
'local.xml overrides base.xml'
;
is
$config
->get(
'logging.level'
),
'debug'
,
'local.ini overrides base.ini'
;
is
$config
->get(
'logging.file'
),
'logfile.log'
,
'base.ini sets logging.file'
;
is
$config
->get(
'extra.debug'
),
'1'
,
'extra.debug from ENV'
;
is(
$config
->get(
'extra.foo'
),
undef
,
'Undefined keys return undef'
);
my
$flat
= Config::Abstraction->new(
config_dirs
=> [
$test_dir
],
env_prefix
=>
'APP_'
,
flatten
=> 1,
);
is
$flat
->get(
'api.timeout'
),
'60'
,
'Flattened: XML override timeout'
;
is(
$flat
->get(
'database.user'
),
'env_user'
,
'Flattened: ENV override still works'
);
write_file(
"$test_dir/foo"
,
<<'YAML');
first:
second: value
YAML
$config
= Config::Abstraction->new(
config_dirs
=> [
$test_dir
],
config_file
=>
'foo'
);
diag(Data::Dumper->new([
$config
])->Dump())
if
(
$ENV
{
'TEST_VERBOSE'
});
cmp_ok(
$config
->get(
'first.second'
),
'eq'
,
'value'
,
'Action similar to Config::Auto works'
);
done_testing();