use warnings;
use Config::Any;
-use NEXT;
+use MRO::Compat;
use Data::Visitor::Callback;
use Catalyst::Utils ();
-our $VERSION = '0.21';
+our $VERSION = '0.24';
=head1 NAME
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
$c->load_config( { $_ => $configs{ $_ } } ) for @main, @locals;
$c->finalize_config;
- $c->NEXT::setup( @_ );
+ $c->next::method( @_ );
}
=head2 load_config
=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 {
values => delete $config->{ lc $_ } || delete $config->{ $_ }
},
grep { ref $config->{ lc $_ } || ref $config->{ $_ } }
- qw( Component Model M View V Controller C )
+ qw( Component Model M View V Controller C Plugin )
);
foreach my $comp ( @components ) {
=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:
=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.