X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FPlugin%2FConfigLoader.pm;h=5c2a61e31064e566ca953192c8d7625a8be768a7;hb=25c714a2c1a38cfef5d75ac87160c56b5a1374d1;hp=188bd1ce97bc5d9f2b08bd7b7594dffab2303aa2;hpb=afce197f767f69b7e4e5ad6e00276accc48e29fd;p=catagits%2FCatalyst-Plugin-ConfigLoader.git diff --git a/lib/Catalyst/Plugin/ConfigLoader.pm b/lib/Catalyst/Plugin/ConfigLoader.pm index 188bd1c..5c2a61e 100644 --- a/lib/Catalyst/Plugin/ConfigLoader.pm +++ b/lib/Catalyst/Plugin/ConfigLoader.pm @@ -8,7 +8,7 @@ use NEXT; use Data::Visitor::Callback; use Catalyst::Utils (); -our $VERSION = '0.16'; +our $VERSION = '0.19'; =head1 NAME @@ -24,13 +24,14 @@ Catalyst::Plugin::ConfigLoader - Load config files of various types # by default myapp.* will be loaded # you can specify a file if you'd like - __PACKAGE__->config( file => 'config.yaml' ); + __PACKAGE__->config( 'Plugin::ConfigLoader' => { file => 'config.yaml' } ); =head1 DESCRIPTION This module will attempt to load find and load a configuration file of various types. Currently it supports YAML, JSON, XML, -INI and Perl formats. +INI and Perl formats. Special configuration for a particular driver format can +be stored in Cconfig-E{ 'Plugin::ConfigLoader' }-E{ driver }>. To support the distinction between development and production environments, this module will also attemp to load a local config (e.g. myapp_local.yaml) @@ -49,23 +50,27 @@ loaded, set the C section. sub setup { my $c = shift; my @files = $c->find_files; - my $cfg = Config::Any->load_files( { - files => \@files, - filter => \&_fix_syntax, - use_ext => 1 - } ); + my $cfg = Config::Any->load_files( + { files => \@files, + filter => \&_fix_syntax, + use_ext => 1, + driver_args => $c->config->{ 'Plugin::ConfigLoader' }->{ driver } + || {}, + } + ); # split the responses into normal and local cfg my $local_suffix = $c->get_config_local_suffix; - my( @cfg, @localcfg ); - for( @$cfg ) { - if( ( keys %$_ )[ 0 ] =~ m{ $local_suffix \. }xms ) { + my ( @cfg, @localcfg ); + for ( @$cfg ) { + if ( ( keys %$_ )[ 0 ] =~ m{ $local_suffix \. }xms ) { push @localcfg, $_; - } else { + } + else { push @cfg, $_; } } - + # load all the normal cfgs, then the local cfgs last so they can override # normal cfgs $c->load_config( $_ ) for @cfg, @localcfg; @@ -84,9 +89,9 @@ context object. It does not return a value. sub load_config { my $c = shift; my $ref = shift; - - my( $file, $config ) = each %$ref; - + + my ( $file, $config ) = %$ref; + $c->config( $config ); $c->log->debug( qq(Loaded Config "$file") ) if $c->debug; @@ -104,15 +109,17 @@ L for loading. sub find_files { my $c = shift; - my( $path, $extension ) = $c->get_config_path; + my ( $path, $extension ) = $c->get_config_path; my $suffix = $c->get_config_local_suffix; my @extensions = @{ Config::Any->extensions }; - + my @files; - if ($extension) { + if ( $extension ) { next unless grep { $_ eq $extension } @extensions; - push @files, $path, "${path}_${suffix}"; - } else { + ( my $local = $path ) =~ s{\.$extension}{_$suffix.$extension}; + push @files, $path, $local; + } + else { @files = map { ( "$path.$_", "${path}_${suffix}.$_" ) } @extensions; } @@ -133,7 +140,7 @@ The order of preference is specified as: =item * C<$ENV{ CATALYST_CONFIG }> -=item * C<$c-Econfig-E{ 'Plugin::ConfigLoader' }-E>gt>{ file }> +=item * C<$c-Econfig-E{ 'Plugin::ConfigLoader' }-E{ file }> =item * C<$c-Epath_to( $application_prefix )> @@ -148,28 +155,31 @@ and will be removed in the next release. =cut sub get_config_path { - my $c = shift; + my $c = shift; # deprecation notice - if( exists $c->config->{ file } ) { - $c->log->warn( q("file" config parameter has been deprecated in favor of "$c->config->{ 'Plugin::ConfigLoader' }->{ file }") ); + if ( exists $c->config->{ file } ) { + $c->log->warn( + q(*** "file" config parameter has been deprecated in favor of "$c->config->{ 'Plugin::ConfigLoader' }->{ file }") + ); + sleep( 3 ); } my $appname = ref $c || $c; my $prefix = Catalyst::Utils::appprefix( $appname ); my $path = Catalyst::Utils::env_value( $c, 'CONFIG' ) || $c->config->{ 'Plugin::ConfigLoader' }->{ file } - || $c->config->{ file } # to be removed next release + || $c->config->{ file } # to be removed next release || $c->path_to( $prefix ); - my( $extension ) = ( $path =~ m{\.(.{1,4})$} ); - - if( -d $path ) { - $path =~ s{[\/\\]$}{}; + my ( $extension ) = ( $path =~ m{\.(.{1,4})$} ); + + if ( -d $path ) { + $path =~ s{[\/\\]$}{}; $path .= "/$prefix"; } - - return( $path, $extension ); + + return ( $path, $extension ); } =head2 get_config_local_suffix @@ -193,17 +203,21 @@ and will be removed in the next release. =cut sub get_config_local_suffix { - my $c = shift; + my $c = shift; # deprecation notice - if( exists $c->config->{ config_local_suffix } ) { - $c->log->warn( q("config_local_suffix" config parameter has been deprecated in favor of "$c->config->{ 'Plugin::ConfigLoader' }->{ config_local_suffix }") ); + if ( exists $c->config->{ config_local_suffix } ) { + $c->log->warn( + q(*** "config_local_suffix" config parameter has been deprecated in favor of "$c->config->{ 'Plugin::ConfigLoader' }->{ config_local_suffix }") + ); + sleep( 3 ); } my $appname = ref $c || $c; - my $suffix = Catalyst::Utils::env_value( $c, 'CONFIG_LOCAL_SUFFIX' ) + my $suffix = Catalyst::Utils::env_value( $c, 'CONFIG_LOCAL_SUFFIX' ) || $c->config->{ 'Plugin::ConfigLoader' }->{ config_local_suffix } - || $c->config->{ config_local_suffix } # to be remove in the next release + || $c->config + ->{ config_local_suffix } # to be remove in the next release || 'local'; return $suffix; @@ -216,10 +230,8 @@ sub _fix_syntax { prefix => $_ eq 'Component' ? '' : $_ . '::', values => delete $config->{ lc $_ } || delete $config->{ $_ } }, - grep { - ref $config->{ lc $_ } || ref $config->{ $_ } - } - qw( Component Model M View V Controller C ) + grep { ref $config->{ lc $_ } || ref $config->{ $_ } } + qw( Component Model M View V Controller C ) ); foreach my $comp ( @components ) { @@ -283,9 +295,10 @@ The above will respond to C<__baz(x,y)__> in config strings. =cut sub config_substitutions { - my $c = shift; - my $subs = $c->config->{ 'Plugin::ConfigLoader' }->{ substitutions } || {}; - $subs->{ HOME } ||= sub { shift->path_to( '' ); }; + my $c = shift; + my $subs = $c->config->{ 'Plugin::ConfigLoader' }->{ substitutions } + || {}; + $subs->{ HOME } ||= sub { shift->path_to( '' ); }; $subs->{ path_to } ||= sub { shift->path_to( @_ ); }; $subs->{ literal } ||= sub { return $_[ 1 ]; }; my $subsre = join( '|', keys %$subs ); @@ -295,7 +308,6 @@ sub config_substitutions { } } - =head1 AUTHOR Brian Cassidy Ebricas@cpan.orgE