summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-02-21 14:20:16 -0600
committerJesse Luehrs <doy@tozt.net>2011-02-21 14:20:16 -0600
commit47bdf9ed57780fccbca69ba0470fb57741494b3c (patch)
treebc6857987596403b48045610c0d6c5109d99d75e /lib
parentccb6cf33d33e58eef1937253be5c470f9449354a (diff)
downloadbread-board-declare-47bdf9ed57780fccbca69ba0470fb57741494b3c.tar.gz
bread-board-declare-47bdf9ed57780fccbca69ba0470fb57741494b3c.zip
also support moose 2 inlining api
Diffstat (limited to 'lib')
-rw-r--r--lib/MooseX/Bread/Board.pm9
-rw-r--r--lib/MooseX/Bread/Board/Meta/Role/Attribute.pm42
2 files changed, 38 insertions, 13 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;