Skip to content
Browse files

fix instance application not passing along role args (lsm)

  • Loading branch information...
1 parent d963b98 commit f315aab389b68172c5139d3f270e2a1e13930ea8 @doy doy committed
View
2 Changes
@@ -14,6 +14,8 @@ for, noteworthy changes.
Moose tests with user that didn't have permission to write to the
t/ directory. (Chris Weyl, Ævar Arnfjörð Bjarmason)
+ * Pass role arguments along when applying roles to instances. (doy, lsm)
+
1.01 Fri, Mar 26, 2010
[NEW FEATURES]
View
4 lib/Moose/Meta/Role.pm
@@ -399,7 +399,7 @@ sub alias_method {
## ------------------------------------------------------------------
sub apply {
- my ($self, $other, @args) = @_;
+ my ($self, $other, %args) = @_;
(blessed($other))
|| Moose->throw_error("You must pass in an blessed instance");
@@ -416,7 +416,7 @@ sub apply {
}
Class::MOP::load_class($application_class);
- return $application_class->new(@args)->apply($self, $other);
+ return $application_class->new(%args)->apply($self, $other, \%args);
}
sub composition_class_roles { }
View
4 lib/Moose/Meta/Role/Application/ToInstance.pm
@@ -18,7 +18,7 @@ __PACKAGE__->meta->add_attribute('rebless_params' => (
));
sub apply {
- my ( $self, $role, $object ) = @_;
+ my ( $self, $role, $object, $args ) = @_;
my $obj_meta = Class::MOP::class_of($object) || 'Moose::Meta::Class';
@@ -30,7 +30,7 @@ sub apply {
my $class = $obj_meta->create_anon_class(
superclasses => [ blessed($object) ],
- roles => [ $role ],
+ roles => [ $role, keys(%$args) ? ($args) : () ],
cache => 1,
);
View
52 t/100_bugs/029_instance_application_role_args.t
@@ -0,0 +1,52 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More;
+use Test::Exception;
+
+{
+ package Point;
+ use Moose;
+
+ with qw/DoesNegated DoesTranspose/;
+
+ has x => ( isa => 'Int', is => 'rw' );
+ has y => ( isa => 'Int', is => 'rw' );
+
+ sub inspect { [$_[0]->x, $_[0]->y] }
+
+ no Moose;
+}
+
+{
+ package DoesNegated;
+ use Moose::Role;
+
+ sub negated {
+ my $self = shift;
+ $self->new( x => -$self->x, y => -$self->y );
+ }
+
+ no Moose::Role;
+}
+
+{
+ package DoesTranspose;
+ use Moose::Role;
+
+ sub transpose {
+ my $self = shift;
+ $self->new( x => $self->y, y => $self->x );
+ }
+
+ no Moose::Role;
+}
+
+my $p = Point->new( x => 4, y => 3 );
+
+DoesTranspose->meta->apply( $p, alias => { transpose => 'negated' } );
+
+is_deeply($p->negated->inspect, [3, 4]);
+is_deeply($p->transpose->inspect, [3, 4]);
+
+done_testing;

0 comments on commit f315aab

Please sign in to comment.
Something went wrong with that request. Please try again.