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]
## ------------------------------------------------------------------
sub apply {
- my ($self, $other, @args) = @_;
+ my ($self, $other, %args) = @_;
(blessed($other))
|| Moose->throw_error("You must pass in an blessed instance");
}
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 { }
));
sub apply {
- my ( $self, $role, $object ) = @_;
+ my ( $self, $role, $object, $args ) = @_;
my $obj_meta = Class::MOP::class_of($object) || 'Moose::Meta::Class';
my $class = $obj_meta->create_anon_class(
superclasses => [ blessed($object) ],
- roles => [ $role ],
+ roles => [ $role, keys(%$args) ? ($args) : () ],
cache => 1,
);
--- /dev/null
+#!/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;