From: Brian Cassidy Date: Mon, 30 Jan 2006 18:47:19 +0000 (+0000) Subject: inlined ConfigLoader and ConfigLoader::YAML X-Git-Tag: 5.7099_04~714 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=b9e0a8558e4cd6783bd5a5e926cff6160504ccf1 inlined ConfigLoader and ConfigLoader::YAML --- diff --git a/lib/Catalyst/Plugin/ConfigLoader.pm b/lib/Catalyst/Plugin/ConfigLoader.pm new file mode 100644 index 0000000..0ba9f99 --- /dev/null +++ b/lib/Catalyst/Plugin/ConfigLoader.pm @@ -0,0 +1,102 @@ +package Catalyst::Plugin::ConfigLoader; + +use strict; +use warnings; + +use NEXT; +use Module::Pluggable::Fast + name => '_config_loaders', + search => [ __PACKAGE__ ], + require => 1; + +our $VERSION = '0.03'; + +=head1 NAME + +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( file = > 'config.yaml' ); + + +=head1 DESCRIPTION + +This mdoule will attempt to load find and load a configuration +file of various types. Currently it supports YAML, JSON, XML, +INI and Perl formats. + +=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 section. + +=cut + +sub setup { + my $c = shift; + my $path = $c->config->{ file } || $c->path_to( Catalyst::Utils::appprefix( ref $c || $c ) ); + + my( $extension ) = ( $path =~ /\.(.{1,4})$/ ); + + for my $loader ( $c->_config_loaders ) { + my @files; + my @extensions = $loader->extensions; + if( $extension ) { + next unless grep { $_ eq $extension } @extensions; + push @files, $path; + } + else { + push @files, "$path.$_" for @extensions; + } + + for( @files ) { + next unless -f $_; + my $config = $loader->load( $_ ); + if( $config ) { + $c->config( $config ); + last; + } + } + } + + $c->NEXT::setup( @_ ); +} + +=head1 AUTHOR + +=over 4 + +=item * Brian Cassidy Ebricas@cpan.orgE + +=back + +=head1 COPYRIGHT AND LICENSE + +Copyright 2006 by Brian Cassidy + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 SEE ALSO + +=over 4 + +=item * L + +=back + +=cut + +1; \ No newline at end of file diff --git a/lib/Catalyst/Plugin/ConfigLoader/YAML.pm b/lib/Catalyst/Plugin/ConfigLoader/YAML.pm new file mode 100644 index 0000000..6acc3a9 --- /dev/null +++ b/lib/Catalyst/Plugin/ConfigLoader/YAML.pm @@ -0,0 +1,81 @@ +package Catalyst::Plugin::ConfigLoader::YAML; + +use strict; +use warnings; + +use File::Slurp; + +=head1 NAME + +Catalyst::Plugin::ConfigLoader::YAML - Load YAML config files + +=head1 DESCRIPTION + +Loads YAML files. Example: + + --- + name: TestApp + Controller::Foo: + foo: bar + +=head1 METHODS + +=head2 extensions( ) + +return an array of valid extensions (C, C). + +=cut + +sub extensions { + return qw( yml yaml ); +} + +=head2 load( $file ) + +Attempts to load C<$file> as a YAML file. + +=cut + +sub load { + my $class = shift; + my $file = shift; + + eval { require YAML::Syck; }; + if( $@ ) { + require YAML; + return YAML::LoadFile( $file ); + } + else { + my $content = read_file( $file ); + return YAML::Syck::Load( $content ); + } +} + +=head1 AUTHOR + +=over 4 + +=item * Brian Cassidy Ebricas@cpan.orgE + +=back + +=head1 COPYRIGHT AND LICENSE + +Copyright 2006 by Brian Cassidy + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 SEE ALSO + +=over 4 + +=item * L + +=item * L + +=back + +=cut + +1; \ No newline at end of file