Activator
view release on metacpan or search on metacpan
lib/Catalyst/Plugin/Activator/Config.pm view on Meta::CPAN
this is to be used as a templeate....
package Catalyst::Plugin::Activator::Config;
use strict;
use warnings;
use NEXT;
=head1 NAME
Catalyst::Plugin::Activator::Config - Load realm specific application configuration files using Activator::Config
=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' } );
In the file, assuming it's in YAML format:
foo: bar
Accessible through the context object, or the class itself
$c->config->{foo} # bar
MyApp->config->{foo} # bar
=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. Special configuration for a particular driver format can
be stored in C<MyApp-E<gt>config-E<gt>{ 'Plugin::ConfigLoader' }-E<gt>{ 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)
which will override any duplicate settings.
=head1 METHODS
=head2 setup( )
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.
=cut
sub setup {
my $c = shift;
my @files = $c->find_files;
my $cfg = Config::Any->load_files(
{ files => \@files,
filter => \&_fix_syntax,
use_ext => 1,
driver_args => $c->config->{ 'Plugin::ConfigLoader' }->{ driver }
|| {},
}
);
# map the array of hashrefs to a simple hash
my %configs = map { %$_ } @$cfg;
# split the responses into normal and local cfg
my $local_suffix = $c->get_config_local_suffix;
my ( @main, @locals );
for ( sort keys %configs ) {
if ( m{$local_suffix\.}ms ) {
push @locals, $_;
}
else {
push @main, $_;
}
}
# load all the normal cfgs, then the local cfgs last so they can override
# normal cfgs
$c->load_config( { $_ => $configs{ $_ } } ) for @main, @locals;
$c->finalize_config;
$c->NEXT::setup( @_ );
}
=head2 load_config
This method handles loading the configuration data into the Catalyst
context object. It does not return a value.
=cut
sub load_config {
my $c = shift;
my $ref = shift;
my ( $file, $config ) = %$ref;
$c->config( $config );
$c->log->debug( qq(Loaded Config "$file") )
if $c->debug;
return;
}
=head2 find_files
This method determines the potential file paths to be used for config loading.
( run in 0.864 second using v1.01-cache-2.11-cpan-39bf76dae61 )