X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FMethod.pm;h=199bc3bcbeb01f8aa18eb8c0ddffa3494756553b;hb=1af3d9e7321d3d561b1c6da5c943af9a64032cee;hp=b242c27e7d6cc6f3d591b91e7a58ae47b882a9f2;hpb=4b18c1b3cf8de42c2454663de378e9c3f2180352;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Method.pm b/lib/Class/MOP/Method.pm index b242c27..199bc3b 100644 --- a/lib/Class/MOP/Method.pm +++ b/lib/Class/MOP/Method.pm @@ -5,9 +5,9 @@ use strict; use warnings; use Carp 'confess'; -use Scalar::Util 'weaken', 'reftype'; +use Scalar::Util 'weaken', 'reftype', 'blessed'; -our $VERSION = '0.91'; +our $VERSION = '1.00'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -28,8 +28,15 @@ sub wrap { my %params = @args; my $code = $params{body}; - (ref $code && 'CODE' eq reftype($code)) - || confess "You must supply a CODE reference to bless, not (" . ($code || 'undef') . ")"; + if (blessed($code) && $code->isa(__PACKAGE__)) { + my $method = $code->clone; + delete $params{body}; + Class::MOP::class_of($class)->rebless_instance($method, %params); + return $method; + } + elsif (!ref $code || 'CODE' ne reftype($code)) { + confess "You must supply a CODE reference to bless, not (" . ($code || 'undef') . ")"; + } ($params{package_name} && $params{name}) || confess "You must supply the package_name and name parameters"; @@ -144,8 +151,9 @@ introspection interface. =item B<< Class::MOP::Method->wrap($code, %options) >> -This is the constructor. It accepts a subroutine reference and a hash -of options. +This is the constructor. It accepts a method body in the form of +either a code reference or a L instance, followed +by a hash of options. The options are: @@ -153,11 +161,13 @@ The options are: =item * name -The method name (without a package name). This is required. +The method name (without a package name). This is required if C<$code> +is a coderef. =item * package_name -The package name for the method. This is required. +The package name for the method. This is required if C<$code> is a +coderef. =item * associated_metaclass @@ -259,7 +269,7 @@ Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE -Copyright 2006-2009 by Infinity Interactive, Inc. +Copyright 2006-2010 by Infinity Interactive, Inc. L