use strict;
use warnings;
+use Scalar::Util 'blessed';
our $VERSION = '0.89_02';
$VERSION = eval $VERSION;
sub apply_metaclass_roles {
my %options = @_;
- my $for = $options{for_class};
+ my $for = blessed $options{for_class}
+ ? $options{for_class}
+ : Class::MOP::class_of($options{for_class});
- my %old_classes = map { $_ => Class::MOP::class_of($for)->$_ }
- grep { Class::MOP::class_of($for)->can($_) }
+ my %old_classes = map { $_ => $for->$_ }
+ grep { $for->can($_) }
@Classes;
my $meta = _make_new_metaclass( $for, \%options );
my $for = shift;
my $options = shift;
- return Class::MOP::class_of($for)
+ return $for
unless grep { exists $options->{ $_ . '_roles' } }
qw(
metaclass
application_to_instance_class
);
- my $old_meta = Class::MOP::class_of($for);
my $new_metaclass
- = _make_new_class( ref $old_meta, $options->{metaclass_roles} );
+ = _make_new_class( ref $for, $options->{metaclass_roles} );
# This could get called for a Moose::Meta::Role as well as a Moose::Meta::Class
my %classes = map {
- $_ => _make_new_class( $old_meta->$_(), $options->{ $_ . '_roles' } )
+ $_ => _make_new_class( $for->$_(), $options->{ $_ . '_roles' } )
}
- grep { $old_meta->can($_) }
+ grep { $for->can($_) }
qw(
attribute_metaclass
method_metaclass
{
Moose::Util::MetaRole::apply_metaclass_roles(
- for_class => 'My::Class',
+ for_class => My::Class->meta,
metaclass_roles => ['Role::Foo'],
);