Fix clone_and_inherit_options() to take 'traits' and 'metaclass' correctly
[gitmo/Mouse.git] / lib / Mouse / Meta / Attribute.pm
index d356c74..0ee8400 100644 (file)
@@ -208,7 +208,7 @@ sub _create_args { # DEPRECATED
 }
 
 sub interpolate_class{
-    my($class, $name, $args) = @_;
+    my($class, $args) = @_;
 
     if(my $metaclass = delete $args->{metaclass}){
         $class = Mouse::Util::resolve_metaclass_alias( Attribute => $metaclass );
@@ -320,10 +320,12 @@ sub _canonicalize_handles {
 }
 
 sub clone_and_inherit_options{
-    my $self = shift;
-    my $name = shift;
+    my($self, %args) = @_;
+
+    my($attribute_class, @traits) = ref($self)->interpolate_class(\%args);
 
-    return ref($self)->new($name, %{$self}, (@_ == 1) ? %{$_[0]} : @_);
+    $args{traits} = \@traits if @traits;
+    return $attribute_class->new($self->name, %{$self}, %args);
 }
 
 sub clone_parent { # DEPRECATED
@@ -562,9 +564,9 @@ on success, otherwise C<confess>es.
 Creates a new attribute in the owner class, inheriting options from parent classes.
 Accessors and helper methods are installed. Some error checking is done.
 
-=item C<< get_read_method_ref >>\r
+=head2 C<< get_read_method_ref >>\r
 \r
-=item C<< get_write_method_ref >>\r
+=head2 C<< get_write_method_ref >>\r
 \r
 Returns the subroutine reference of a method suitable for reading or\r
 writing the attribute's value in the associated class. These methods\r