accept fully named args in Class::MOP::Attribute::new
Yuval Kogman [Fri, 8 Aug 2008 22:19:14 +0000 (22:19 +0000)]
lib/Class/MOP.pm
lib/Class/MOP/Attribute.pm

index bd51287..33ad8ce 100644 (file)
@@ -509,9 +509,12 @@ Class::MOP::Attribute->meta->add_attribute(
 # so that it uses the attributes meta-objects
 # to construct itself.
 Class::MOP::Attribute->meta->add_method('new' => sub {
-    my $class   = shift;
-    my $name    = shift;
-    my %options = @_;
+    my ( $class, @args ) = @_;
+
+    unshift @args, "name" if @args % 2 == 1;
+    my %options = @args;
+
+    my $name = $options{name};
 
     (defined $name && $name)
         || confess "You must provide a name for the attribute";
@@ -531,7 +534,7 @@ Class::MOP::Attribute->meta->add_method('new' => sub {
     }
 
     # return the new object
-    $class->meta->new_object(name => $name, %options);
+    $class->meta->new_object(%options);
 });
 
 Class::MOP::Attribute->meta->add_method('clone' => sub {
index 697fb3a..4be906d 100644 (file)
@@ -24,9 +24,12 @@ use base 'Class::MOP::Object';
 # meta-objects.
 #     - Ain't meta-circularity grand? :)
 sub new {
-    my $class   = shift;
-    my $name    = shift;
-    my %options = @_;
+    my ( $class, @args ) = @_;
+
+    unshift @args, "name" if @args % 2 == 1;
+    my %options = @args;
+
+    my $name = $options{name};
 
     (defined $name && $name)
         || confess "You must provide a name for the attribute";