Skip to content
Permalink
Browse files

fix instance application not passing along role args (lsm)

  • Loading branch information...
doy committed Apr 8, 2010
1 parent d963b98 commit f315aab389b68172c5139d3f270e2a1e13930ea8
@@ -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]
@@ -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 { }
@@ -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,
);

@@ -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.
You can’t perform that action at this time.