summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-09-23 01:26:51 -0500
committerJesse Luehrs <doy@tozt.net>2009-09-23 01:26:51 -0500
commit9e2ca78efe5d76f5308b9843081e5c90a461f6f1 (patch)
tree6f3f0fa5964f5c2a206ea72afe787b02085b27c2
parent19435a164724e1cc3dab3ff8c3cd42392eb67c20 (diff)
downloadmoosex-methodtraits-9e2ca78efe5d76f5308b9843081e5c90a461f6f1.tar.gz
moosex-methodtraits-9e2ca78efe5d76f5308b9843081e5c90a461f6f1.zip
handle passing in no coderef (for existing methods)HEADmaster
-rw-r--r--lib/MooseX/MethodTraits.pm14
-rw-r--r--t/004-generate-method.t2
2 files changed, 11 insertions, 5 deletions
diff --git a/lib/MooseX/MethodTraits.pm b/lib/MooseX/MethodTraits.pm
index 9644e45..91155af 100644
--- a/lib/MooseX/MethodTraits.pm
+++ b/lib/MooseX/MethodTraits.pm
@@ -1,6 +1,6 @@
package MooseX::MethodTraits;
use Moose::Exporter;
-use Scalar::Util qw(blessed);
+use Scalar::Util qw(blessed reftype);
=head1 NAME
@@ -21,14 +21,18 @@ sub _generate_method_creators {
for my $sub (keys %$with_traits) {
my $spec = $with_traits->{$sub};
my $traits = $spec->{traits} || [];
- my $munge = $spec->{munge} || sub { shift, {@_} };
+ my $munge = $spec->{munge} || sub {
+ my $meta = shift;
+ my $name = shift;
+ my $method = reftype($_[0]) && reftype($_[0]) eq 'CODE'
+ ? shift : $meta->find_method_by_name($name);
+ return $method, {@_};
+ };
my $code = sub {
+ my ($method, $args) = $munge->(@_);
my $meta = shift;
my $name = shift;
- # XXX: need to do something with $args - these should be for
- # initializing attributes in the method traits that are applied
- my ($method, $args) = $munge->(@_);
my $superclass = blessed($method) || $meta->method_metaclass;
my $method_metaclass = Moose::Meta::Class->create_anon_class(
diff --git a/t/004-generate-method.t b/t/004-generate-method.t
index 38165a2..b23a9b0 100644
--- a/t/004-generate-method.t
+++ b/t/004-generate-method.t
@@ -13,6 +13,8 @@ BEGIN {
alias => {
traits => ['Foo::Alias'],
munge => sub {
+ my $meta = shift;
+ my $alias_name = shift;
my $name = shift;
return sub { shift->$name(@_) },
{ aliased_from => $name, @_ };