[Catalyst-commits] r6716 - in trunk/Catalyst-Plugin-ConfigLoader:
lib/Catalyst/Plugin t t/mockapp
bricas at dev.catalyst.perl.org
bricas at dev.catalyst.perl.org
Wed Aug 22 19:18:46 GMT 2007
Author: bricas
Date: 2007-08-22 19:18:46 +0100 (Wed, 22 Aug 2007)
New Revision: 6716
Modified:
trunk/Catalyst-Plugin-ConfigLoader/lib/Catalyst/Plugin/ConfigLoader.pm
trunk/Catalyst-Plugin-ConfigLoader/t/20-mock_load.t
trunk/Catalyst-Plugin-ConfigLoader/t/mockapp/mockapp.pl
Log:
allow custom macros or overriding of config_substitutions() sub.
Modified: trunk/Catalyst-Plugin-ConfigLoader/lib/Catalyst/Plugin/ConfigLoader.pm
===================================================================
--- trunk/Catalyst-Plugin-ConfigLoader/lib/Catalyst/Plugin/ConfigLoader.pm 2007-08-22 17:05:51 UTC (rev 6715)
+++ trunk/Catalyst-Plugin-ConfigLoader/lib/Catalyst/Plugin/ConfigLoader.pm 2007-08-22 18:18:46 UTC (rev 6716)
@@ -217,11 +217,8 @@
at runtime. If you need to do this to properly configure any
plugins, it's important to load ConfigLoader before them.
ConfigLoader provides a default finalize_config method which
-walks through the loaded config hash and replaces any strings
-beginning containing C<__HOME__> with the full path to
-app's home directory (i.e. C<$c-E<gt>path_to('')> ).
-You can also use C<__path_to(foo/bar)__> which translates to
-C<$c-E<gt>path_to('foo', 'bar')>
+walks through the loaded config hash and calls the C<config_substitutions>
+sub on any string.
=cut
@@ -230,13 +227,54 @@
my $v = Data::Visitor::Callback->new(
plain_value => sub {
return unless defined $_;
- s{__HOME__}{ $c->path_to( '' ) }eg;
- s{__path_to\((.+?)\)__}{ $c->path_to( split( '/', $1 ) ) }eg;
+ $c->config_substitutions( $_ );
}
);
$v->visit( $c->config );
}
+=head2 config_substitutions( $value )
+
+This method substitutes macros found with calls to a function. There are three
+default macros:
+
+=over 4
+
+=item * C<__HOME__> - replaced with C<$c-E<gt>path_to('')>
+
+=item * C<__path_to(foo/bar)__> - replaced with C<$c-E<gt>path_to('foo/bar')>
+
+=item * C<__literal(__FOO__)__> - leaves __FOO__ alone (allows you to use
+C<__DATA__> as a config value, for example)
+
+=back
+
+The parameter list is split on comma (C<,>). You can override this method to
+do your own string munging, or you can define your own macros in
+C<MyApp->config->{ substitutions }>. Example:
+
+ MyApp->config->{ substitutions } = {
+ baz => sub { my $c = shift; qux( @_ ); }
+ }
+
+The above will respond to C<__baz(x,y)__> in config strings.
+
+=cut
+
+sub config_substitutions {
+ my $c = shift;
+ my $subs = $c->config->{ substitutions } || {};
+ $subs->{ HOME } ||= sub { shift->path_to( '' ); };
+ $subs->{ path_to } ||= sub { shift->path_to( @_ ); };
+ $subs->{ literal } ||= sub { return $_[ 1 ]; };
+ my $subsre = join( '|', keys %$subs );
+
+ for ( @_ ) {
+ s{__($subsre)(?:\((.+?)\))?__}{ $subs->{ $1 }->( $c, $2 ? split( /,/, $2 ) : () ) }eg;
+ }
+}
+
+
=head1 AUTHOR
Brian Cassidy E<lt>bricas at cpan.orgE<gt>
Modified: trunk/Catalyst-Plugin-ConfigLoader/t/20-mock_load.t
===================================================================
--- trunk/Catalyst-Plugin-ConfigLoader/t/20-mock_load.t 2007-08-22 17:05:51 UTC (rev 6715)
+++ trunk/Catalyst-Plugin-ConfigLoader/t/20-mock_load.t 2007-08-22 18:18:46 UTC (rev 6716)
@@ -1,12 +1,16 @@
package MockApp;
-use Test::More tests => 7;
+use Test::More tests => 9;
use Cwd;
$ENV{ CATALYST_HOME } = cwd . '/t/mockapp';
use_ok( 'Catalyst', qw( ConfigLoader ) );
+__PACKAGE__->config->{ substitutions } = {
+ foo => sub { shift; join('-', @_); }
+};
+
__PACKAGE__->setup;
ok( __PACKAGE__->config );
@@ -15,3 +19,5 @@
is( __PACKAGE__->config->{ 'Model::Baz' }->{ qux }, 'xyzzy' );
is( __PACKAGE__->config->{ 'Model::Baz' }->{ another }, 'new key' );
is( __PACKAGE__->config->{ 'view' }, 'View::TT::New' );
+is( __PACKAGE__->config->{ 'foo_sub' }, 'x-y' );
+is( __PACKAGE__->config->{ 'literal_macro' }, '__DATA__' );
Modified: trunk/Catalyst-Plugin-ConfigLoader/t/mockapp/mockapp.pl
===================================================================
--- trunk/Catalyst-Plugin-ConfigLoader/t/mockapp/mockapp.pl 2007-08-22 17:05:51 UTC (rev 6715)
+++ trunk/Catalyst-Plugin-ConfigLoader/t/mockapp/mockapp.pl 2007-08-22 18:18:46 UTC (rev 6716)
@@ -6,5 +6,7 @@
},
'Model::Baz' => {
qux => 'xyzzy'
- }
+ },
+ foo_sub => '__foo(x,y)__',
+ literal_macro => '__literal(__DATA__)__',
}
More information about the Catalyst-commits
mailing list