Use Ref::Util where appropriate
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Component.pm
index 01e38f5..8fe109f 100644 (file)
@@ -11,6 +11,7 @@ use mro 'c3';
 use Scalar::Util 'blessed';
 use Class::Load 'is_class_loaded';
 use Moose::Util 'find_meta';
+use Ref::Util qw(is_plain_hashref);
 use namespace::clean -except => 'meta';
 
 with 'MooseX::Emulate::Class::Accessor::Fast';
@@ -91,12 +92,12 @@ sub BUILDARGS {
     my $args = {};
 
     if (@_ == 1) {
-        $args = $_[0] if ref($_[0]) eq 'HASH';
+        $args = $_[0] if is_plain_hashref($_[0]);
     } elsif (@_ == 2) { # is it ($app, $args) or foo => 'bar' ?
         if (blessed($_[0])) {
-            $args = $_[1] if ref($_[1]) eq 'HASH';
+            $args = $_[1] if is_plain_hashref($_[1]);
         } elsif (is_class_loaded($_[0]) &&
-                $_[0]->isa('Catalyst') && ref($_[1]) eq 'HASH') {
+                $_[0]->isa('Catalyst') && is_plain_hashref($_[1])) {
             $args = $_[1];
         } else {
             $args = +{ @_ };
@@ -112,7 +113,7 @@ sub COMPONENT {
     my ( $class, $c ) = @_;
 
     # Temporary fix, some components does not pass context to constructor
-    my $arguments = ( ref( $_[-1] ) eq 'HASH' ) ? $_[-1] : {};
+    my $arguments = is_plain_hashref($_[-1]) ? $_[-1] : {};
     if ( my $next = $class->next::can ) {
       my ($next_package) = Class::MOP::get_code_info($next);
       warn "There is a COMPONENT method resolving after Catalyst::Component in ${next_package}.\n";
@@ -203,8 +204,8 @@ something like this:
   }
 
 B<NOTE:> Generally when L<Catalyst> starts, it initializes all the components
-and passes the hashref present in any configutation information to the
-COMPONET method.  For example
+and passes the hashref present in any configuration information to the
+COMPONENT method.  For example
 
     MyApp->config(
       'Model::Foo' => {
@@ -294,7 +295,7 @@ second argument is blessed (is a context) or not (is an application class name)
 it MUST return something valid for the case when the scope is application.  This is
 required because a component maybe be called from the application scope even if it
 requires a context and you must prevent errors from being issued if this happens.
-Remeber not all components that ACCEPT_CONTEXT actually need or use context information
+Remember not all components that ACCEPT_CONTEXT actually need or use context information
 (and there is a school of thought that suggestions doing so is a design error anyway...)
 
 =head1 SEE ALSO