use warnings;
use Config::Any;
-use NEXT;
+use MRO::Compat;
use Data::Visitor::Callback;
use Catalyst::Utils ();
-our $VERSION = '0.22';
+our $VERSION = '0.25';
=head1 NAME
=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:
To support the distinction between development and production environments,
this module will also attemp to load a local config (e.g. myapp_local.yaml)
-which will override any duplicate settings.
+which will override any duplicate settings. See
+L<get_config_local_suffix|/get_config_local_suffix>
+for details on how this is configured.
=head1 METHODS
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<config()> section.
+loaded, set the C<config()> section.
=cut
$c->load_config( { $_ => $configs{ $_ } } ) for @main, @locals;
$c->finalize_config;
- $c->NEXT::setup( @_ );
+ $c->next::method( @_ );
}
=head2 load_config
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 );
=head2 get_config_local_suffix
Determines the suffix of files used to override the main config. By default
-this value is C<local>, but it can be specified in the following order of preference:
+this value is C<local>, which will load C<myapp_local.conf>. The suffix can
+be specified in the following order of preference:
=over 4
=back
+The first one of these values found replaces the default of C<local> in the
+name of the local config file to be loaded.
+
+For example, if C< $ENV{ MYAPP_CONFIG_LOCAL_SUFFIX }> is set to C<testing>,
+ConfigLoader will try and load C<myapp_testing.conf> instead of
+C<myapp_local.conf>.
+
=cut
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';
=item * C<__HOME__> - replaced with C<$c-E<gt>path_to('')>
+=item * C<__ENV(foo)__> - replaced with the value of C<$ENV{foo}>
+
=item * C<__path_to(foo/bar)__> - replaced with C<$c-E<gt>path_to('foo/bar')>
=item * C<__literal(__FOO__)__> - leaves __FOO__ alone (allows you to use
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 );
=item * David Kamholz E<lt>dkamholz@cpan.orgE<gt> - L<Data::Visitor> 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
=head1 COPYRIGHT AND LICENSE
-Copyright 2008 by Brian Cassidy
+Copyright 2006-2009 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<Catalyst>