pre load class in class_type
大沢 和宏 [Mon, 8 Dec 2008 03:16:44 +0000 (03:16 +0000)]
lib/Mouse/TypeRegistry.pm
t/800_shikabased/005-class_type.t
t/lib/ClassType_Foo.pm [new file with mode: 0644]

index 156dcc6..458c810 100644 (file)
@@ -127,6 +127,7 @@ sub _class_type {
     my $pkg = caller(0);
     my($name, $conf) = @_;
     my $class = $conf->{class};
+    Mouse::load_class($class);
     _subtype(
         $name => where => sub {
             defined $_ && ref($_) eq $class;
index d8b89cf..18418e3 100644 (file)
@@ -1,22 +1,15 @@
 use strict;
 use warnings;
 use Test::More tests => 4;
-
-{
-    package Response::Headers;
-    use Mouse;
-    has 'foo' => ( is => 'rw' );
-}
-
 {
     package Response;
     use Mouse;
     use Mouse::TypeRegistry;
 
-    class_type Headers => { class => 'Response::Headers' };
+    class_type Headers => { class => 't::lib::ClassType_Foo' };
     coerce 'Headers' =>
         from 'HashRef' => via {
-            Response::Headers->new(%{ $_ });
+            t::lib::ClassType_Foo->new(%{ $_ });
         },
     ;
 
@@ -28,8 +21,8 @@ use Test::More tests => 4;
 }
 
 my $res = Response->new(headers => { foo => 'bar' });
-isa_ok($res->headers, 'Response::Headers');
+isa_ok($res->headers, 't::lib::ClassType_Foo');
 is($res->headers->foo, 'bar');
 $res->headers({foo => 'yay'});
-isa_ok($res->headers, 'Response::Headers');
+isa_ok($res->headers, 't::lib::ClassType_Foo');
 is($res->headers->foo, 'yay');
diff --git a/t/lib/ClassType_Foo.pm b/t/lib/ClassType_Foo.pm
new file mode 100644 (file)
index 0000000..9c9bbd8
--- /dev/null
@@ -0,0 +1,4 @@
+package t::lib::ClassType_Foo;
+use Mouse;
+has 'foo' => ( is => 'rw' );
+1;