Change the API of generate_role to a hash so we can specify more
Shawn M Moore [Thu, 29 Jan 2009 00:01:59 +0000 (00:01 +0000)]
things

lib/MooseX/Role/Parameterized/Meta/Role/Parameterizable.pm
t/002-role-block.t
t/006-requires.t
t/007-excludes.t

index c72c405..d965575 100644 (file)
@@ -59,10 +59,12 @@ sub construct_parameters {
 }
 
 sub generate_role {
-    my $self = shift;
+    my $self     = shift;
+    my %args     = @_;
 
-    my $parameters = @_ == 1 ? shift
-                             : $self->construct_parameters(@_);
+    my $parameters = blessed($args{parameters})
+                   ? $args{parameters}
+                   : $self->construct_parameters(%{ $args{parameters} });
 
     confess "A role generator is required to generate roles"
         unless $self->has_role_generator;
@@ -81,12 +83,16 @@ sub generate_role {
 }
 
 sub apply {
-    my $self  = shift;
-    my $class = shift;
-    my %args  = @_;
+    my $self     = shift;
+    my $consumer = shift;
+    my %args     = @_;
+
+    my $role = $self->generate_role(
+        consumer   => $consumer,
+        parameters => \%args,
+    );
 
-    my $role = $self->generate_role(%args);
-    $role->apply($class, %args);
+    $role->apply($consumer, %args);
 }
 
 sub apply_parameterizable_role {
index b30f256..e126b1a 100644 (file)
@@ -33,7 +33,9 @@ do {
 ok(MyPerson->meta->has_role_generator, "MyPerson has a role generator");
 
 my $role = MyPerson->meta->generate_role(
-    default_age => 7,
+    parameters => {
+        default_age => 7,
+    },
 );
 
 isa_ok($role, 'Moose::Meta::Role', 'generate_role created a role');
index 9bc9ba0..d80ed52 100644 (file)
@@ -21,7 +21,11 @@ do {
 
 sub requires_names {
     map {
-        MyRole::Requires->meta->generate_role(requires => $_)->name
+        MyRole::Requires->meta->generate_role(
+            parameters => {
+                requires => $_,
+            },
+        )->name
     } @_
 }
 
index f7673d8..076d6d1 100644 (file)
@@ -24,7 +24,11 @@ Moose::Meta::Role->create("Role::B");
 
 sub excludes_roles {
     map {
-        MyRole::Excluder->meta->generate_role(exclude => $_)->name
+        MyRole::Excluder->meta->generate_role(
+            parameters => {
+                exclude => $_,
+            },
+        )->name
     } @_
 }