use Carp 'confess';
use Sub::Name 'subname';
+use Data::OptList;
use Sub::Exporter;
our $VERSION = '0.07';
with => sub {
my $meta = _find_meta();
return subname 'Moose::Role::with' => sub (@) {
- my (@roles) = @_;
- confess "Must specify at least one role" unless @roles;
- Class::MOP::load_class($_) for @roles;
- ($_->can('meta') && $_->meta->isa('Moose::Meta::Role'))
- || confess "You can only consume roles, $_ is not a Moose role"
- foreach @roles;
- if (scalar @roles == 1) {
- $roles[0]->meta->apply($meta);
+ my (@args) = @_;
+ confess "Must specify at least one role" unless @args;
+
+ my $roles = Data::OptList::mkopt(\@args);
+
+ #use Data::Dumper;
+ #warn Dumper $roles;
+
+ Class::MOP::load_class($_->[0]) for @$roles;
+
+ ($_->[0]->can('meta') && $_->[0]->meta->isa('Moose::Meta::Role'))
+ || confess "You can only consume roles, " . $_->[0] . " is not a Moose role"
+ foreach @$roles;
+
+ if (scalar @$roles == 1) {
+ my ($role, $params) = @{$roles->[0]};
+ $role->meta->apply($meta, (defined $params ? %$params : ()));
}
else {
Moose::Meta::Role->combine(
- map { $_->meta } @roles
+ map { $_->[0]->meta } @$roles
)->apply($meta);
}
};
=head1 COPYRIGHT AND LICENSE
-Copyright 2006, 2007 by Infinity Interactive, Inc.
+Copyright 2006-2008 by Infinity Interactive, Inc.
L<http://www.iinteractive.com>