name => '_config_loaders',\r
search => [ __PACKAGE__ ],\r
require => 1;\r
+use Data::Visitor::Callback;\r
\r
-our $VERSION = '0.02';\r
+our $VERSION = '0.04';\r
\r
=head1 NAME\r
\r
\r
package MyApp;\r
\r
- use Catalyst( qw( ConfigLoader ... ) );\r
+ # ConfigLoader should be first in your list so\r
+ # other plugins can get the config information\r
+ use Catalyst qw( ConfigLoader ... );\r
\r
# by default myapp.* will be loaded\r
# you can specify a file if you'd like\r
- __PACKAGE__->config( file = > 'config.yaml' );\r
- \r
+ __PACKAGE__->config( file = > 'config.yaml' ); \r
\r
=head1 DESCRIPTION\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 set the C<config()> section once a file has been\r
-successfully loaded.\r
+attempt to use each plugin and, once a file has been successfully\r
+loaded, set the C<config()> section.\r
\r
=cut\r
\r
}\r
}\r
\r
+ $c->finalize_config;\r
+\r
$c->NEXT::setup( @_ );\r
}\r
\r
+=head2 finalize_config\r
+\r
+This method is called after the config file is loaded. It can be\r
+used to implement tuning of config values that can only be done\r
+at runtime. If you need to do this to properly configure any\r
+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
+\r
+=cut\r
+\r
+sub finalize_config {\r
+ my $c = shift;\r
+ my $v = Data::Visitor::Callback->new(\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
+\r
=head1 AUTHOR\r
\r
=over 4 \r
\r
=back\r
\r
+=head1 CONTRIBUTORS\r
+\r
+The following people have generously donated their time to the\r
+development of this module:\r
+\r
+=over 4\r
+\r
+=item * David Kamholz E<lt>dkamholz@cpan.orgE<gt>\r
+\r
+=back\r
+\r
=head1 COPYRIGHT AND LICENSE\r
\r
Copyright 2006 by Brian Cassidy\r
\r
=cut\r
\r
-1;
\ No newline at end of file
+1;\r