diff options
author | doy <doy@tozt.net> | 2009-01-24 01:25:19 -0500 |
---|---|---|
committer | doy <doy@tozt.net> | 2009-01-24 01:25:19 -0500 |
commit | 0ec74d144538849c124db585d96b054f106a2ba9 (patch) | |
tree | 16df08ce2f2fa9dea554ac7fee92b45d77788b5e | |
parent | 84edd7dca442e498f0898e4ce1ddcd227a41b1b1 (diff) | |
download | bot-games-0ec74d144538849c124db585d96b054f106a2ba9.tar.gz bot-games-0ec74d144538849c124db585d96b054f106a2ba9.zip |
first shot at fixing method modifiers
-rw-r--r-- | lib/Bot/Games/Meta/Role/Class.pm | 21 | ||||
-rw-r--r-- | lib/Bot/Games/OO.pm | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/Bot/Games/Meta/Role/Class.pm b/lib/Bot/Games/Meta/Role/Class.pm new file mode 100644 index 0000000..fd8d078 --- /dev/null +++ b/lib/Bot/Games/Meta/Role/Class.pm @@ -0,0 +1,21 @@ +#!/usr/bin/perl +package Bot::Games::Meta::Role::Class; +use Moose::Role; + +after ((map { "add_${_}_method_modifier" } qw/before after around/) => sub { + my $self = shift; + my $name = shift; + + my $method_meta = $self->remove_method($name); + my $method_metaclass = Moose::Meta::Class->create_anon_class( + superclasses => [blessed $method_meta], + roles => ['Bot::Games::Meta::Role::Command'], + cache => 1, + )->name; + $method_meta = $method_metaclass->wrap($method_meta); + $self->add_method($name, $method_meta); +}); + +no Moose::Role; + +1; diff --git a/lib/Bot/Games/OO.pm b/lib/Bot/Games/OO.pm index 708f146..6a1ebf0 100644 --- a/lib/Bot/Games/OO.pm +++ b/lib/Bot/Games/OO.pm @@ -40,6 +40,7 @@ sub init_meta { Moose::Util::MetaRole::apply_metaclass_roles( for_class => $options{for_class}, attribute_metaclass_roles => ['Bot::Games::Meta::Role::Attribute'], + metaclass_roles => ['Bot::Games::Meta::Role::Class'], ); return $options{for_class}->meta; } |