Documented auto/forward/detach behaviour for chains in Intro
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Utils.pm
index b3b75bb..ac20a70 100644 (file)
@@ -6,6 +6,7 @@ use File::Spec;
 use HTTP::Request;
 use Path::Class;
 use URI;
+use Class::Inspector;
 
 =head1 NAME
 
@@ -197,7 +198,7 @@ Returns an L<HTTP::Request> object for a uri.
 sub request {
     my $request = shift;
     unless ( ref $request ) {
-        if ( $request =~ m/http/i ) {
+        if ( $request =~ m/^http/i ) {
             $request = URI->new($request)->canonical;
         }
         else {
@@ -210,9 +211,37 @@ sub request {
     return $request;
 }
 
+=head2 ensure_class_loaded($class_name)
+
+Loads the class unless it already has been loaded.
+
+=cut
+
+sub ensure_class_loaded {
+    my $class = shift;
+
+    return if Class::Inspector->loaded( $class ); # if a symbol entry exists we don't load again
+
+    # this hack is so we don't overwrite $@ if the load did not generate an error
+    my $error;
+    {
+        local $@;
+        eval "require $class";
+        $error = $@;
+    }
+
+    die $error if $error;
+    die "require $class was successful but the package is not defined"
+        unless Class::Inspector->loaded($class);
+
+    return 1;
+}
+
+
 =head1 AUTHOR
 
 Sebastian Riedel, C<sri@cpan.org>
+Yuval Kogman, C<nothingmuch@woobling.org>
 
 =head1 COPYRIGHT