summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordoy <doy@tozt.net>2009-01-24 01:25:19 -0500
committerdoy <doy@tozt.net>2009-01-24 01:25:19 -0500
commit0ec74d144538849c124db585d96b054f106a2ba9 (patch)
tree16df08ce2f2fa9dea554ac7fee92b45d77788b5e
parent84edd7dca442e498f0898e4ce1ddcd227a41b1b1 (diff)
downloadbot-games-0ec74d144538849c124db585d96b054f106a2ba9.tar.gz
bot-games-0ec74d144538849c124db585d96b054f106a2ba9.zip
first shot at fixing method modifiers
-rw-r--r--lib/Bot/Games/Meta/Role/Class.pm21
-rw-r--r--lib/Bot/Games/OO.pm1
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;
}