From 47bdf9ed57780fccbca69ba0470fb57741494b3c Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 21 Feb 2011 14:20:16 -0600 Subject: also support moose 2 inlining api --- lib/MooseX/Bread/Board.pm | 9 ++++-- lib/MooseX/Bread/Board/Meta/Role/Attribute.pm | 42 ++++++++++++++++++++------- t/21-roles.t | 8 +++-- 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', -- cgit v1.2.3-54-g00ecf