X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FPlugin%2FConfigLoader.pm;h=3c4f0dce8193cacf6b644a3d14ba95865b4dce9c;hb=0e0a7f601693756636f12b3130ee481e73cb7e97;hp=c1618e3bcfa3b435fe7bfd7041015dfa47a65017;hpb=6a5c6f1945285d8987373511e4b2e8818ba137e1;p=catagits%2FCatalyst-Plugin-ConfigLoader.git diff --git a/lib/Catalyst/Plugin/ConfigLoader.pm b/lib/Catalyst/Plugin/ConfigLoader.pm index c1618e3..3c4f0dc 100644 --- a/lib/Catalyst/Plugin/ConfigLoader.pm +++ b/lib/Catalyst/Plugin/ConfigLoader.pm @@ -8,7 +8,7 @@ use MRO::Compat; use Data::Visitor::Callback; use Catalyst::Utils (); -our $VERSION = '0.24'; +our $VERSION = '0.29'; =head1 NAME @@ -17,14 +17,14 @@ Catalyst::Plugin::ConfigLoader - Load config files of various types =head1 SYNOPSIS package MyApp; - + # ConfigLoader should be first in your list so # other plugins can get the config information use Catalyst qw( ConfigLoader ... ); - + # by default myapp.* will be loaded # you can specify a file if you'd like - __PACKAGE__->config( 'Plugin::ConfigLoader' => { file => 'config.yaml' } ); + __PACKAGE__->config( 'Plugin::ConfigLoader' => { file => 'config.yaml' } ); In the file, assuming it's in YAML format: @@ -63,7 +63,7 @@ for details on how this is configured. This method is automatically called by Catalyst's setup routine. It will attempt to use each plugin and, once a file has been successfully -loaded, set the C section. +loaded, set the C section. =cut @@ -179,11 +179,11 @@ sub get_config_path { my $appname = ref $c || $c; my $prefix = Catalyst::Utils::appprefix( $appname ); - my $path = Catalyst::Utils::env_value( $c, 'CONFIG' ) + my $path = Catalyst::Utils::env_value( $appname, 'CONFIG' ) || $c->config->{ 'Plugin::ConfigLoader' }->{ file } || $c->path_to( $prefix ); - my ( $extension ) = ( $path =~ m{\.(.{1,4})$} ); + my ( $extension ) = ( $path =~ m{\.([^/\.]{1,4})$} ); if ( -d $path ) { $path =~ s{[\/\\]$}{}; @@ -222,7 +222,7 @@ sub get_config_local_suffix { my $c = shift; my $appname = ref $c || $c; - my $suffix = Catalyst::Utils::env_value( $c, 'CONFIG_LOCAL_SUFFIX' ) + my $suffix = Catalyst::Utils::env_value( $appname, 'CONFIG_LOCAL_SUFFIX' ) || $c->config->{ 'Plugin::ConfigLoader' }->{ config_local_suffix } || 'local'; @@ -273,13 +273,15 @@ sub finalize_config { =head2 config_substitutions( $value ) -This method substitutes macros found with calls to a function. There are three -default macros: +This method substitutes macros found with calls to a function. There are a +number of default macros: =over 4 =item * C<__HOME__> - replaced with C<$c-Epath_to('')> +=item * C<__ENV(foo)__> - replaced with the value of C<$ENV{foo}> + =item * C<__path_to(foo/bar)__> - replaced with C<$c-Epath_to('foo/bar')> =item * C<__literal(__FOO__)__> - leaves __FOO__ alone (allows you to use @@ -305,6 +307,17 @@ sub config_substitutions { my $subs = $c->config->{ 'Plugin::ConfigLoader' }->{ substitutions } || {}; $subs->{ HOME } ||= sub { shift->path_to( '' ); }; + $subs->{ ENV } ||= + sub { + my ( $c, $v ) = @_; + if (! defined($ENV{$v})) { + Catalyst::Exception->throw( message => + "Missing environment variable: $v" ); + return ""; + } else { + return $ENV{ $v }; + } + }; $subs->{ path_to } ||= sub { shift->path_to( @_ ); }; $subs->{ literal } ||= sub { return $_[ 1 ]; }; my $subsre = join( '|', keys %$subs ); @@ -329,9 +342,11 @@ development of this module: =item * David Kamholz Edkamholz@cpan.orgE - L integration +=item * Stuart Watt - Addition of ENV macro. + =back -Work to this module has been generously sponsored by: +Work to this module has been generously sponsored by: =over 4 @@ -341,14 +356,14 @@ Work to this module has been generously sponsored by: =head1 COPYRIGHT AND LICENSE -Copyright 2006-2009 by Brian Cassidy +Copyright 2006-2010 by Brian Cassidy This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. +it under the same terms as Perl itself. =head1 SEE ALSO -=over 4 +=over 4 =item * L