summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-05-25 19:36:49 -0500
committerJesse Luehrs <doy@tozt.net>2011-05-25 19:36:49 -0500
commit53617281749f123de4da146e810fd892c1a28dd3 (patch)
tree3f8f77978d37698a7cc77ae9ac53ebc5e993cb55
parent219d8e56458e61eab39c78395cddb9689256f512 (diff)
downloadbread-board-declare-53617281749f123de4da146e810fd892c1a28dd3.tar.gz
bread-board-declare-53617281749f123de4da146e810fd892c1a28dd3.zip
ensure classes corresponding to class types are loaded
otherwise, type inference doesn't work
-rw-r--r--lib/Bread/Board/Declare/Meta/Role/Attribute.pm2
-rw-r--r--t/51-infer-loading.t31
-rw-r--r--t/lib/Inferred/Bar.pm9
-rw-r--r--t/lib/Inferred/Foo.pm13
4 files changed, 55 insertions, 0 deletions
diff --git a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm
index 1eabba1..000abef 100644
--- a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm
+++ b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm
@@ -147,6 +147,7 @@ after attach_to_class => sub {
if ($self->has_block) {
if ($tc && $tc->isa('Moose::Meta::TypeConstraint::Class')) {
%params = (%params, class => $tc->class);
+ Class::MOP::load_class($tc->class);
}
$service = Bread::Board::Declare::BlockInjection->new(
%params,
@@ -160,6 +161,7 @@ after attach_to_class => sub {
);
}
elsif ($tc && $tc->isa('Moose::Meta::TypeConstraint::Class')) {
+ Class::MOP::load_class($tc->class);
$service = Bread::Board::Declare::ConstructorInjection->new(
%params,
class => $tc->class,
diff --git a/t/51-infer-loading.t b/t/51-infer-loading.t
new file mode 100644
index 0000000..97e98d3
--- /dev/null
+++ b/t/51-infer-loading.t
@@ -0,0 +1,31 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use lib 't/lib';
+
+{
+ package Foo;
+ use Moose;
+ use Bread::Board::Declare;
+
+ has foo => (
+ is => 'ro',
+ isa => 'Inferred::Foo',
+ infer => 1,
+ );
+
+ has bar => (
+ is => 'ro',
+ isa => 'Inferred::Bar',
+ );
+}
+
+{
+ my $c = Foo->new;
+ isa_ok($c->foo, 'Inferred::Foo');
+ isa_ok($c->foo->bar, 'Inferred::Bar');
+ isa_ok($c->bar, 'Inferred::Bar');
+}
+
+done_testing;
diff --git a/t/lib/Inferred/Bar.pm b/t/lib/Inferred/Bar.pm
new file mode 100644
index 0000000..9536a04
--- /dev/null
+++ b/t/lib/Inferred/Bar.pm
@@ -0,0 +1,9 @@
+package Inferred::Bar;
+use Moose;
+
+
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/t/lib/Inferred/Foo.pm b/t/lib/Inferred/Foo.pm
new file mode 100644
index 0000000..af60637
--- /dev/null
+++ b/t/lib/Inferred/Foo.pm
@@ -0,0 +1,13 @@
+package Inferred::Foo;
+use Moose;
+
+has bar => (
+ is => 'ro',
+ isa => 'Inferred::Bar',
+ required => 1,
+);
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;