X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FUtils.pm;h=ac20a70e2e89ec924e159ff40235b35be4c0def1;hb=f365983bb5c7fb67e1b5095edbb5166396bbc556;hp=b3b75bb161a897610da190fb59bf5df1fe62f0f6;hpb=b5ecfcf07b8ffe7e9984f0279c8781ce51c6ac6a;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Utils.pm b/lib/Catalyst/Utils.pm index b3b75bb..ac20a70 100644 --- a/lib/Catalyst/Utils.pm +++ b/lib/Catalyst/Utils.pm @@ -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 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 +Yuval Kogman, C =head1 COPYRIGHT