use strict;
use warnings;
+use Data::OptList;
use Sub::Exporter;
use Scalar::Util 'blessed';
use Class::MOP 0.60;
-our $VERSION = '0.74';
+our $VERSION = '0.85';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
my @exports = qw[
- find_meta
+ find_meta
does_role
- search_class_by_role
+ search_class_by_role
ensure_all_roles
apply_all_roles
get_all_init_args
my ($class_or_obj, $role) = @_;
my $meta = find_meta($class_or_obj);
-
+
return unless defined $meta;
return unless $meta->can('does_role');
return 1 if $meta->does_role($role);
sub search_class_by_role {
my ($class_or_obj, $role_name) = @_;
-
+
my $meta = find_meta($class_or_obj);
return unless defined $meta;
foreach my $class ($meta->class_precedence_list) {
-
- my $_meta = find_meta($class);
+
+ my $_meta = find_meta($class);
next unless defined $_meta;
my $roles = Data::OptList::mkopt( [@_] );
foreach my $role (@$roles) {
- my $meta = Class::MOP::load_class( $role->[0] );
+ Class::MOP::load_class( $role->[0] );
+ my $meta = Class::MOP::class_of( $role->[0] );
- unless ($meta->isa('Moose::Meta::Role') ) {
+ unless ($meta && $meta->isa('Moose::Meta::Role') ) {
require Moose;
Moose->throw_error( "You can only consume roles, "
. $role->[0]
return +{
map { $_->init_arg => $_->get_value($instance) }
grep { $_->has_value($instance) }
- grep { defined($_->init_arg) }
+ grep { defined($_->init_arg) }
$class->get_all_attributes
};
}
if $cache{$cache_key}{$metaclass_name};
my $possible_full_name
- = 'Moose::Meta::'
+ = 'Moose::Meta::'
. $type
. '::Custom::'
. ( $options{trait} ? "Trait::" : "" )
return $list;
}
+sub _caller_info {
+ my $level = @_ ? ($_[0] + 1) : 2;
+ my %info;
+ @info{qw(package file line)} = caller($level);
+ return \%info;
+}
+
1;
__END__
=item B<find_meta($class_or_obj)>
This method takes a class name or object and attempts to find a
-metaclass for the class, if one exists. It will not create one if it
+metaclass for the class, if one exists. It will B<not> create one if it
does not yet exist.
=item B<does_role($class_or_obj, $role_name)>
=head1 BUGS
-All complex software has bugs lurking in it, and this module is no
+All complex software has bugs lurking in it, and this module is no
exception. If you find a bug please either email me, or add the bug
to cpan-RT.