updated to latest ConfigLoader
Brian Cassidy [Tue, 18 Apr 2006 23:42:16 +0000 (23:42 +0000)]
lib/Catalyst/Plugin/ConfigLoader.pm

index 0fcbc70..f073ccf 100644 (file)
@@ -10,7 +10,7 @@ use Module::Pluggable::Fast
     require => 1;\r
 use Data::Visitor::Callback;\r
 \r
-our $VERSION = '0.04';\r
+our $VERSION = '0.05';\r
 \r
 =head1 NAME\r
 \r
@@ -30,17 +30,21 @@ Catalyst::Plugin::ConfigLoader - Load config files of various types
 \r
 =head1 DESCRIPTION\r
 \r
-This mdoule will attempt to load find and load a configuration\r
+This module will attempt to load find and load a configuration\r
 file of various types. Currently it supports YAML, JSON, XML,\r
 INI and Perl formats.\r
 \r
+To support the distinction between development and production environments,\r
+this module will also attemp to load a local config (e.g. myapp_local.yaml)\r
+which will override any duplicate settings.\r
+\r
 =head1 METHODS\r
 \r
 =head2 setup( )\r
 \r
 This method is automatically called by Catalyst's setup routine. It will\r
 attempt to use each plugin and, once a file has been successfully\r
-loaded, set the C<config()> section.\r
+loaded, set the C<config()> section. \r
 \r
 =cut\r
 \r
@@ -58,7 +62,7 @@ sub setup {
             push @files, $path;\r
         }\r
         else {\r
-            push @files, "$path.$_" for @extensions;\r
+            @files = map { ( "$path.$_", "${path}_local.$_" ) } @extensions;\r
         }\r
 \r
         for( @files ) {\r
@@ -84,15 +88,21 @@ at runtime. If you need to do this to properly configure any
 plugins, it's important to load ConfigLoader before them.\r
 ConfigLoader provides a default finalize_config method which\r
 walks through the loaded config hash and replaces any strings\r
-beginning with C<< __HOME__/<path> >> with the full path to\r
-the file inside the app's home directory.\r
+beginning containing C<__HOME__> with the full path to\r
+app's home directory (i.e. C<$c-E<gt>path_to('')> ).\r
+You can also use C<__path_to('foo/bar')__> which translates to\r
+C<$c-E<gt>path_to('foo', 'bar')> \r
 \r
 =cut\r
 \r
 sub finalize_config {\r
     my $c = shift;\r
     my $v = Data::Visitor::Callback->new(\r
-        plain_value => sub { s[^__HOME__/(.+)$][ $c->path_to($1) ]e }\r
+        plain_value => sub {\r
+            return unless defined $_;\r
+            s[__HOME__][ $c->path_to( '' ) ]e;\r
+            s[__path_to\((.+)\)__][ $c->path_to( split( '/', $1 ) ) ]e;\r
+        }\r
     );\r
     $v->visit( $c->config );\r
 }\r
@@ -133,4 +143,4 @@ it under the same terms as Perl itself.
 \r
 =cut\r
 \r
-1;
\ No newline at end of file
+1;\r