From: Brian Cassidy Date: Wed, 22 Aug 2007 20:08:30 +0000 (+0000) Subject: pass special config options to loaders X-Git-Tag: v0.08~6 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FConfig-Any.git;a=commitdiff_plain;h=e0c0c283d718e11db7e71a002fee6642ce1b73bd pass special config options to loaders --- diff --git a/lib/Config/Any.pm b/lib/Config/Any.pm index d2f77e5..e627564 100644 --- a/lib/Config/Any.pm +++ b/lib/Config/Any.pm @@ -6,7 +6,7 @@ use Carp; use Module::Pluggable::Object (); use English qw(-no_match_vars); -our $VERSION = '0.07'; +our $VERSION = '0.08'; =head1 NAME @@ -14,7 +14,7 @@ Config::Any - Load configuration from different file formats, transparently =head1 VERSION -This document describes Config::Any version 0.0.7 +This document describes Config::Any version 0.0.8 =head1 SYNOPSIS @@ -85,7 +85,7 @@ sub load_files { } my %load_args = map { $_ => defined $args->{$_} ? $args->{$_} : undef } - qw(filter use_ext force_plugins); + qw(filter use_ext force_plugins driver_args); $load_args{files} = [ grep { -f $_ } @{$args->{files}} ]; return $class->_load(\%load_args); } @@ -163,6 +163,9 @@ sub _load { last unless keys %files; my %ext = _maphash $loader->extensions; + my ($loader_class) = $loader =~ /::([^:]+)$/; + my $driver_args = $args->{driver_args}{$loader_class} || {}; + FILE: for my $filename (keys %files) { # use file extension to decide whether this loader should try this file @@ -181,7 +184,7 @@ sub _load { my $config; eval { - $config = $loader->load( $filename ); + $config = $loader->load( $filename, $driver_args ); }; next if $EVAL_ERROR; # if it croaked or warned, we can't use it diff --git a/lib/Config/Any/General.pm b/lib/Config/Any/General.pm index 76b04a9..975bff6 100644 --- a/lib/Config/Any/General.pm +++ b/lib/Config/Any/General.pm @@ -40,12 +40,15 @@ Attempts to load C<$file> via Config::General. sub load { my $class = shift; my $file = shift; + my $args = shift || {}; # work around bug (?) in Config::General # return if $class->_test_perl($file); + $args->{-ConfigFile} = $file; + require Config::General; - my $configfile = Config::General->new( $file ); + my $configfile = Config::General->new( %$args ); my $config = { $configfile->getall }; return $config;