X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FAttribute.pm;h=61e9dba672efa55d195866c499487a5f518cf16e;hp=41d80a6d437b2b3aa0735b8e7a539ac11ace3559;hb=7bc014283bca353a4d7a0019a0d49d4d7b11bd84;hpb=2984d37cdd94795e0676573b0a6e1dadb453c86a diff --git a/lib/Mouse/Meta/Attribute.pm b/lib/Mouse/Meta/Attribute.pm index 41d80a6..61e9dba 100644 --- a/lib/Mouse/Meta/Attribute.pm +++ b/lib/Mouse/Meta/Attribute.pm @@ -412,6 +412,11 @@ sub _canonicalize_handles { elsif (ref($handles) eq 'ARRAY') { return map { $_ => $_ } @$handles; } + elsif ( ref($handles) eq 'CODE' ) { + my $class_or_role = ( $self->{isa} || $self->{does} ) + || $self->throw_error( "Cannot find delegate metaclass for attribute " . $self->name ); + return $handles->( $self, Mouse::Meta::Class->initialize("$class_or_role")); + } elsif (ref($handles) eq 'Regexp') { my $class_or_role = ($self->{isa} || $self->{does}) || $self->throw_error("Cannot delegate methods based on a Regexp without a type constraint (isa)");