From: gfx Date: Sat, 10 Oct 2009 08:57:13 +0000 (+0900) Subject: Add regexp handles X-Git-Tag: 0.37_06~12 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=9ae9702effbac814bdd5304e2ff7d4157de754ff;p=gitmo%2FMouse.git Add regexp handles --- diff --git a/lib/Mouse/Meta/Attribute.pm b/lib/Mouse/Meta/Attribute.pm index 29046c0..1b2fb03 100644 --- a/lib/Mouse/Meta/Attribute.pm +++ b/lib/Mouse/Meta/Attribute.pm @@ -388,6 +388,15 @@ sub _canonicalize_handles { elsif (ref($handles) eq 'ARRAY') { return map { $_ => $_ } @$handles; } + 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)"); + + my $meta = Mouse::Meta::Class->initialize("$class_or_role"); # "" for stringify + return map { $_ => $_ } + grep { $_ ne 'meta' && !Mouse::Object->can($_) && $_ =~ $handles } + $meta->isa('Mouse::Meta::Class') ? $meta->get_all_method_names : $meta->get_method_list; + } else { $self->throw_error("Unable to canonicalize the 'handles' option with $handles"); } @@ -578,13 +587,13 @@ on success, otherwise Ces. Creates a new attribute in the owner class, inheriting options from parent classes. Accessors and helper methods are installed. Some error checking is done. -=head2 C<< get_read_method_ref >> - -=head2 C<< get_write_method_ref >> - -Returns the subroutine reference of a method suitable for reading or -writing the attribute's value in the associated class. These methods -always return a subroutine reference, regardless of whether or not the +=head2 C<< get_read_method_ref >> + +=head2 C<< get_write_method_ref >> + +Returns the subroutine reference of a method suitable for reading or +writing the attribute's value in the associated class. These methods +always return a subroutine reference, regardless of whether or not the attribute is read- or write-only. =head1 SEE ALSO