Added COMPONENT() and ACCEPT_CONTEXT() support
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Utils.pm
index e329648..3a0974b 100644 (file)
@@ -1,8 +1,8 @@
 package Catalyst::Utils;
 
 use strict;
-use attributes ();
 use Catalyst::Exception;
+use File::Spec;
 use HTTP::Request;
 use Path::Class;
 use URI;
@@ -19,19 +19,20 @@ See L<Catalyst>.
 
 =head1 METHODS
 
-=over 4
+=head2 appprefix($class)
 
-=item attrs($coderef)
-
-Returns attributes for coderef in a arrayref
+       MyApp::Foo becomes myapp_foo
 
 =cut
 
-sub attrs { attributes::get( $_[0] ) || [] }
-
-=item class2appclass($class);
+sub appprefix {
+    my $class = shift;
+    $class =~ s/\:\:/_/g;
+    $class = lc($class);
+    return $class;
+}
 
-Returns the appclass for class.
+=head2 class2appclass($class);
 
     MyApp::C::Foo::Bar becomes MyApp
     My::App::C::Foo::Bar becomes My::App
@@ -47,9 +48,7 @@ sub class2appclass {
     return $appname;
 }
 
-=item class2classprefix($class);
-
-Returns the classprefix for class.
+=head2 class2classprefix($class);
 
     MyApp::C::Foo::Bar becomes MyApp::C
     My::App::C::Foo::Bar becomes My::App::C
@@ -65,9 +64,7 @@ sub class2classprefix {
     return $prefix;
 }
 
-=item class2classsuffix($class);
-
-Returns the classsuffix for class.
+=head2 class2classsuffix($class);
 
     MyApp::C::Foo::Bar becomes C::Foo::Bar
 
@@ -80,9 +77,9 @@ sub class2classsuffix {
     return $class;
 }
 
-=item class2env($class);
+=head2 class2env($class);
 
-Returns the enviroment name for class.
+Returns the environment name for class.
 
     MyApp becomes MYAPP
     My::App becomes MY_APP
@@ -95,11 +92,11 @@ sub class2env {
     return uc($class);
 }
 
-=item class2prefix( $class, $case );
+=head2 class2prefix( $class, $case );
 
-Returns the prefix for class.
+Returns the uri prefix for a class. If case is false the prefix is converted to lowercase.
 
-    My::App::C::Foo::Bar becomes /foo/bar
+    My::App::C::Foo::Bar becomes foo/bar
 
 =cut
 
@@ -114,7 +111,36 @@ sub class2prefix {
     return $prefix;
 }
 
-=item home($class)
+=head2 class2tempdir( $class [, $create ] );
+
+Returns a tempdir for a class. If create is true it will try to create the path.
+
+    My::App becomes /tmp/my/app
+    My::App::C::Foo::Bar becomes /tmp/my/app/c/foo/bar
+
+=cut
+
+sub class2tempdir {
+    my $class  = shift || '';
+    my $create = shift || 0;
+    my @parts = split '::', lc $class;
+
+    my $tmpdir = dir( File::Spec->tmpdir, @parts )->cleanup;
+
+    if ( $create && !-e $tmpdir ) {
+
+        eval { $tmpdir->mkpath };
+
+        if ($@) {
+            Catalyst::Exception->throw(
+                message => qq/Couldn't create tmpdir '$tmpdir', "$@"/ );
+        }
+    }
+
+    return $tmpdir->stringify;
+}
+
+=head2 home($class)
 
 Returns home directory for given class.
 
@@ -136,6 +162,7 @@ sub home {
         {
             $home = $subdir;
         }
+
         # clean up relative path:
         # MyApp/script/.. -> MyApp
         my ($lastdir) = $home->dir_list( -1, 1 );
@@ -146,11 +173,11 @@ sub home {
     return $home;
 }
 
-=item prefix($class, $name);
+=head2 prefix($class, $name);
 
 Returns a prefixed action.
 
-    MyApp::C::Foo::Bar, yada becomes /foo/bar/yada
+    MyApp::C::Foo::Bar, yada becomes foo/bar/yada
 
 =cut
 
@@ -161,54 +188,28 @@ sub prefix {
     return $name;
 }
 
-=item reflect_actions($class);
+=head2 request($uri)
 
-Returns an arrayref containing all actions of a component class.
-
-=cut
-
-sub reflect_actions {
-    my $class   = shift;
-    my $actions = [];
-    eval '$actions = $class->_action_cache';
-    
-    if ( $@ ) {
-        Catalyst::Exception->throw(
-            message => qq/Couldn't reflect actions of component "$class", "$@"/
-        );
-    }
-    
-    return $actions;
-}
-
-=item request($string);
-
-Returns an C<HTTP::Request> from a string.
+Returns an L<HTTP::Request> object for a uri.
 
 =cut
 
 sub request {
     my $request = shift;
-
     unless ( ref $request ) {
-
-        if ( $request =~ m/http/i ) {
+        if ( $request =~ m/^http/i ) {
             $request = URI->new($request)->canonical;
         }
         else {
             $request = URI->new( 'http://localhost' . $request )->canonical;
         }
     }
-
     unless ( ref $request eq 'HTTP::Request' ) {
         $request = HTTP::Request->new( 'GET', $request );
     }
-
     return $request;
 }
 
-=back
-
 =head1 AUTHOR
 
 Sebastian Riedel, C<sri@cpan.org>