name => '_config_loaders',\r
search => [ __PACKAGE__ ],\r
require => 1;\r
+use Data::Visitor::Callback;\r
\r
-our $VERSION = '0.03';\r
+our $VERSION = '0.04';\r
\r
=head1 NAME\r
\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
}\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 { s[^__HOME__/(.+)$][ $c->path_to($1) ]e }\r
+ );\r
+ $v->visit($c->config);\r
+}\r
+\r
=head1 AUTHOR\r
\r
=over 4 \r