From: Jonathan Rockway Date: Sat, 21 Jul 2007 02:59:04 +0000 (+0000) Subject: add env_value patch from (Adam Herzog)++ X-Git-Tag: 5.7099_04~177 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=cb69249ef4c0f2c88ec4361b46be37d473402153;hp=cbb931057eb985308705c7b29aca87600b99ecd4 add env_value patch from (Adam Herzog)++ --- diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 284f114..de2f188 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -1924,13 +1924,8 @@ sub setup_dispatcher { $dispatcher = 'Catalyst::Dispatcher::' . $dispatcher; } - if ( $ENV{CATALYST_DISPATCHER} ) { - $dispatcher = 'Catalyst::Dispatcher::' . $ENV{CATALYST_DISPATCHER}; - } - - if ( $ENV{ uc($class) . '_DISPATCHER' } ) { - $dispatcher = - 'Catalyst::Dispatcher::' . $ENV{ uc($class) . '_DISPATCHER' }; + if ( my $env = Catalyst::Utils::env_value( $class, 'DISPATCHER' ) ) { + $dispatcher = 'Catalyst::Dispatcher::' . $env; } unless ($dispatcher) { @@ -1958,12 +1953,8 @@ sub setup_engine { $engine = 'Catalyst::Engine::' . $engine; } - if ( $ENV{CATALYST_ENGINE} ) { - $engine = 'Catalyst::Engine::' . $ENV{CATALYST_ENGINE}; - } - - if ( $ENV{ uc($class) . '_ENGINE' } ) { - $engine = 'Catalyst::Engine::' . $ENV{ uc($class) . '_ENGINE' }; + if ( my $env = Catalyst::Utils::env_value( $class, 'ENGINE' ) ) { + $engine = 'Catalyst::Engine::' . $env; } if ( $ENV{MOD_PERL} ) { @@ -2078,13 +2069,8 @@ Sets up the home directory. sub setup_home { my ( $class, $home ) = @_; - if ( $ENV{CATALYST_HOME} ) { - $home = $ENV{CATALYST_HOME}; - } - - if ( $ENV{ uc($class) . '_HOME' } ) { - $class =~ s/::/_/g; - $home = $ENV{ uc($class) . '_HOME' }; + if ( my $env = Catalyst::Utils::env_value( $class, 'HOME' ) ) { + $home = $env; } unless ($home) { @@ -2110,14 +2096,8 @@ sub setup_log { $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'); diff --git a/lib/Catalyst/Utils.pm b/lib/Catalyst/Utils.pm index 6c2ecb5..60f2708 100644 --- a/lib/Catalyst/Utils.pm +++ b/lib/Catalyst/Utils.pm @@ -292,6 +292,28 @@ sub merge_hashes { 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 diff --git a/t/unit_utils_env_value.t b/t/unit_utils_env_value.t new file mode 100644 index 0000000..015b455 --- /dev/null +++ b/t/unit_utils_env_value.t @@ -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' ); +} +