From 53617281749f123de4da146e810fd892c1a28dd3 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 25 May 2011 19:36:49 -0500 Subject: ensure classes corresponding to class types are loaded otherwise, type inference doesn't work --- lib/Bread/Board/Declare/Meta/Role/Attribute.pm | 2 ++ t/51-infer-loading.t | 31 ++++++++++++++++++++++++++ t/lib/Inferred/Bar.pm | 9 ++++++++ t/lib/Inferred/Foo.pm | 13 +++++++++++ 4 files changed, 55 insertions(+) create mode 100644 t/51-infer-loading.t create mode 100644 t/lib/Inferred/Bar.pm create mode 100644 t/lib/Inferred/Foo.pm 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; -- cgit v1.2.3-54-g00ecf