I think I stumbled across a silly bug in setup_home(), when trying to set the home directory via an ENV var for an application named something like 'MyApp::Web' instead of just 'MyApp'. It would look for the existence of MYAPP::WEB_HOME, but then try to set the home directory from MYAPP_WEB_HOME. The patch changes it to always look for and use MYAPP_WEB_HOME.

Here's the output from an svn diff, against trunk. It's a very minor change, but I know patches have a better chance of being applied if they include tests so I included a test file, as well. :) I didn't see any existing tests for setup_home, so I created a new unit_core file... let me know if I should have put the tests somewhere else better.

Thanks,
-A

Index: t/unit_core_setup_home.t
===================================================================
--- t/unit_core_setup_home.t    (revision 0)
+++ t/unit_core_setup_home.t    (revision 0)
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+
+use_ok('Catalyst');
+
+####################################################################### #######
+$ENV{'MYAPP_HOME'} = '/some/directory/myapp';
+{
+
+    package MyApp;
+    use base qw/Catalyst/;
+}
+
+ok( MyApp->setup_home(), 'Called setup_home() successfully' );
+is( MyApp->config->{home},
+    '/some/directory/myapp', 'Got the right home directory' );
+
+####################################################################### #######
+$ENV{'MYAPP_WEB_HOME'} = '/some/directory/myapp_web';
+{
+
+    package MyApp::Web;
+    use base qw/Catalyst/;
+}
+
+ok( MyApp::Web->setup_home(), 'Called setup_home() successfully' );
+is( MyApp::Web->config->{home},
+    '/some/directory/myapp_web', 'Got the right home directory' );
+
Index: lib/Catalyst.pm
===================================================================
--- lib/Catalyst.pm     (revision 6518)
+++ lib/Catalyst.pm     (working copy)
@@ -2081,9 +2081,9 @@
         $home = $ENV{CATALYST_HOME};
     }
-    if ( $ENV{ uc($class) . '_HOME' } ) {
-        $class =~ s/::/_/g;
-        $home = $ENV{ uc($class) . '_HOME' };
+    my $class_env_home = Catalyst::Utils::class2env($class) . '_HOME';
+    if ( $ENV{$class_env_home} ) {
+        $home = $ENV{$class_env_home};
     }
     unless ($home) {


_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to