[Catalyst] setup_home() bug
Adam Herzog
adam at herzogdesigns.com
Sat Jul 21 00:27:22 GMT 2007
On Jul 20, 2007, at 5:47 PM, Jonathan T. Rockway wrote:
> Thanks for the patch, it looks great. The only problem is that your
> mail client seems to have wrapped some long lines, and even when I
> manually fix it C<patch> is unable to apply the patch.
But... but... the longest line is only 79 chars. Stupid mail client.
*shakes fist angrily*
Anyway, patch attached.
Thanks!
-A
-------------- next part --------------
Index: t/unit_utils_env_value.t
===================================================================
--- t/unit_utils_env_value.t (revision 0)
+++ t/unit_utils_env_value.t (revision 0)
@@ -0,0 +1,44 @@
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+
+BEGIN { use_ok("Catalyst::Utils") }
+
+##############################################################################
+### No env vars defined
+##############################################################################
+{
+ ok( !Catalyst::Utils::env_value( 'MyApp', 'Key' ),
+ 'No env values defined returns false'
+ );
+}
+
+##############################################################################
+### App env var defined
+##############################################################################
+{
+ $ENV{'MYAPP2_KEY'} = 'Env value 2';
+ is( Catalyst::Utils::env_value( 'MyApp2', 'Key' ),
+ 'Env value 2', 'Got the right value from the application var' );
+}
+
+##############################################################################
+### Catalyst env var defined
+##############################################################################
+{
+ $ENV{'CATALYST_KEY'} = 'Env value 3';
+ is( Catalyst::Utils::env_value( 'MyApp3', 'Key' ),
+ 'Env value 3', 'Got the right value from the catalyst var' );
+}
+
+##############################################################################
+### Catalyst and Application env vars defined
+##############################################################################
+{
+ $ENV{'CATALYST_KEY'} = 'Env value bad';
+ $ENV{'MYAPP4_KEY'} = 'Env value 4';
+ is( Catalyst::Utils::env_value( 'MyApp4', 'Key' ),
+ 'Env value 4', 'Got the right value from the application var' );
+}
+
Index: lib/Catalyst.pm
===================================================================
--- lib/Catalyst.pm (revision 6588)
+++ lib/Catalyst.pm (working copy)
@@ -1924,15 +1924,10 @@
$dispatcher = 'Catalyst::Dispatcher::' . $dispatcher;
}
- if ( $ENV{CATALYST_DISPATCHER} ) {
- $dispatcher = 'Catalyst::Dispatcher::' . $ENV{CATALYST_DISPATCHER};
+ if ( my $env = Catalyst::Utils::env_value( $class, 'DISPATCHER' ) ) {
+ $dispatcher = 'Catalyst::Dispatcher::' . $env;
}
- if ( $ENV{ uc($class) . '_DISPATCHER' } ) {
- $dispatcher =
- 'Catalyst::Dispatcher::' . $ENV{ uc($class) . '_DISPATCHER' };
- }
-
unless ($dispatcher) {
$dispatcher = $class->dispatcher_class;
}
@@ -1958,14 +1953,10 @@
$engine = 'Catalyst::Engine::' . $engine;
}
- if ( $ENV{CATALYST_ENGINE} ) {
- $engine = 'Catalyst::Engine::' . $ENV{CATALYST_ENGINE};
+ if ( my $env = Catalyst::Utils::env_value( $class, 'ENGINE' ) ) {
+ $engine = 'Catalyst::Engine::' . $env;
}
- if ( $ENV{ uc($class) . '_ENGINE' } ) {
- $engine = 'Catalyst::Engine::' . $ENV{ uc($class) . '_ENGINE' };
- }
-
if ( $ENV{MOD_PERL} ) {
# create the apache method
@@ -2078,15 +2069,10 @@
sub setup_home {
my ( $class, $home ) = @_;
- if ( $ENV{CATALYST_HOME} ) {
- $home = $ENV{CATALYST_HOME};
+ if ( my $env = Catalyst::Utils::env_value( $class, 'HOME' ) ) {
+ $home = $env;
}
- if ( $ENV{ uc($class) . '_HOME' } ) {
- $class =~ s/::/_/g;
- $home = $ENV{ uc($class) . '_HOME' };
- }
-
unless ($home) {
$home = Catalyst::Utils::home($class);
}
@@ -2110,14 +2096,8 @@
$class->log( Catalyst::Log->new );
}
- my $app_flag = Catalyst::Utils::class2env($class) . '_DEBUG';
-
- if (
- ( defined( $ENV{CATALYST_DEBUG} ) || defined( $ENV{$app_flag} ) )
- ? ( $ENV{CATALYST_DEBUG} || $ENV{$app_flag} )
- : $debug
- )
- {
+ my $env_debug = Catalyst::Utils::env_value( $class, 'DEBUG' );
+ if ( defined($env_debug) ? $env_debug : $debug ) {
no strict 'refs';
*{"$class\::debug"} = sub { 1 };
$class->log->debug('Debug messages enabled');
Index: lib/Catalyst/Utils.pm
===================================================================
--- lib/Catalyst/Utils.pm (revision 6588)
+++ lib/Catalyst/Utils.pm (working copy)
@@ -292,7 +292,29 @@
return \%merged;
}
+=head2 env_value($class, $key)
+Checks for and returns an environment value. For instance, if $key is
+'home', then this method will check for and return the first value it finds,
+looking at $ENV{MYAPP_HOME} and $ENV{CATALYST_HOME}.
+
+=cut
+
+sub env_value {
+ my ( $class, $key ) = @_;
+
+ $key = uc($key);
+ my @prefixes = ( class2env($class), 'CATALYST' );
+
+ for my $prefix (@prefixes) {
+ if ( defined( my $value = $ENV{"${prefix}_${key}"} ) ) {
+ return $value;
+ }
+ }
+
+ return;
+}
+
=head1 AUTHOR
Sebastian Riedel, C<sri at cpan.org>
-------------- next part --------------
More information about the Catalyst
mailing list