X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse.pm;h=4731125524869b07aa88eea31c3dd8aaff376f62;hb=c4776109ad776237bc75cafd9d91abbe7c1398b7;hp=7ea314d2e879a68fc9bf62d5755ef11499479efd;hpb=7ca75105077a853f05aa08bfdc2d1adc76bcb364;p=gitmo%2FMouse.git diff --git a/lib/Mouse.pm b/lib/Mouse.pm index 7ea314d..4731125 100644 --- a/lib/Mouse.pm +++ b/lib/Mouse.pm @@ -4,7 +4,7 @@ use warnings; use 5.006; use base 'Exporter'; -our $VERSION = '0.15'; +our $VERSION = '0.18'; BEGIN { if ($ENV{MOUSE_DEBUG}) { @@ -32,13 +32,25 @@ sub has { my $names = shift; $names = [$names] if !ref($names); + my $metaclass = 'Mouse::Meta::Attribute'; + my %options = @_; + + if ( my $metaclass_name = delete $options{metaclass} ) { + my $new_class = Mouse::Util::resolve_metaclass_alias( + 'Attribute', + $metaclass_name + ); + if ( $metaclass ne $new_class ) { + $metaclass = $new_class; + } + } for my $name (@$names) { if ($name =~ s/^\+//) { - Mouse::Meta::Attribute->clone_parent($meta, $name, @_); + $metaclass->clone_parent($meta, $name, @_); } else { - Mouse::Meta::Attribute->create($meta, $name, @_); + $metaclass->create($meta, $name, @_); } } }