summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/MooseX/Bread/Board.pm9
-rw-r--r--lib/MooseX/Bread/Board/Meta/Role/Attribute.pm42
-rw-r--r--t/21-roles.t8
3 files changed, 44 insertions, 15 deletions
diff --git a/lib/MooseX/Bread/Board.pm b/lib/MooseX/Bread/Board.pm
index 2f4c4b8..be2d707 100644
--- a/lib/MooseX/Bread/Board.pm
+++ b/lib/MooseX/Bread/Board.pm
@@ -8,9 +8,12 @@ my (undef, undef, $init_meta) = Moose::Exporter->build_import_methods(
class => ['MooseX::Bread::Board::Meta::Role::Class'],
instance => ['MooseX::Bread::Board::Meta::Role::Instance'],
},
- #role_metaroles => {
- #applied_attribute => ['MooseX::Bread::Board::Meta::Role::Attribute'],
- #},
+ (Moose->VERSION >= 1.9900
+ ? (role_metaroles => {
+ applied_attribute =>
+ ['MooseX::Bread::Board::Meta::Role::Attribute'],
+ })
+ : ()),
base_class_roles => ['MooseX::Bread::Board::Role::Object'],
);
diff --git a/lib/MooseX/Bread/Board/Meta/Role/Attribute.pm b/lib/MooseX/Bread/Board/Meta/Role/Attribute.pm
index f45cd6d..52e5a7c 100644
--- a/lib/MooseX/Bread/Board/Meta/Role/Attribute.pm
+++ b/lib/MooseX/Bread/Board/Meta/Role/Attribute.pm
@@ -144,16 +144,38 @@ around get_value => sub {
}
};
-around accessor_metaclass => sub {
- my $orig = shift;
- my $self = shift;
-
- return Moose::Meta::Class->create_anon_class(
- superclasses => [ $self->$orig(@_) ],
- roles => [ 'MooseX::Bread::Board::Meta::Role::Accessor' ],
- cache => 1
- )->name;
-};
+if (Moose->VERSION > 1.9900) {
+ around _inline_instance_get => sub {
+ my $orig = shift;
+ my $self = shift;
+ my ($instance) = @_;
+ return 'do {' . "\n"
+ . 'my $val;' . "\n"
+ . 'if (' . $self->_inline_instance_has($instance) . ') {' . "\n"
+ . '$val = ' . $self->$orig($instance) . ';' . "\n"
+ . '}' . "\n"
+ . 'else {' . "\n"
+ . '$val = ' . $instance . '->get_service(\'' . $self->name . '\')->get;' . "\n"
+ . $self->_inline_check_constraint(
+ '$val', '$type_constraint', '$type_constraint_obj'
+ )
+ . '}' . "\n"
+ . '$val' . "\n"
+ . '}';
+ };
+}
+else {
+ around accessor_metaclass => sub {
+ my $orig = shift;
+ my $self = shift;
+
+ return Moose::Meta::Class->create_anon_class(
+ superclasses => [ $self->$orig(@_) ],
+ roles => [ 'MooseX::Bread::Board::Meta::Role::Accessor' ],
+ cache => 1
+ )->name;
+ };
+}
no Moose::Role;
diff --git a/t/21-roles.t b/t/21-roles.t
index 5be41fd..255039d 100644
--- a/t/21-roles.t
+++ b/t/21-roles.t
@@ -9,7 +9,9 @@ use Test::More;
use MooseX::Bread::Board;
has role1 => (
- traits => ['Service'],
+ (Moose->VERSION < 1.9900
+ ? (traits => ['Service'])
+ : ()),
is => 'ro',
isa => 'Str',
value => 'ROLE1',
@@ -46,7 +48,9 @@ use Test::More;
use MooseX::Bread::Board;
has role2 => (
- traits => ['Service'],
+ (Moose->VERSION < 1.9900
+ ? (traits => ['Service'])
+ : ()),
is => 'ro',
isa => 'Str',
value => 'ROLE2',