X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FUtil.pm;h=469e2814fcab8aa37a4752eaa88be72bb11665b6;hb=ff2b7a57bf3ab01b13e36bb84faab23ad8504c85;hp=ac486064d5f0c1365012af7e7e2132d1911226ad;hpb=5394a1c721689ae6c3168a22dd92a0499e8d9744;p=gitmo%2FMoose.git diff --git a/lib/Moose/Util.pm b/lib/Moose/Util.pm index ac48606..469e281 100644 --- a/lib/Moose/Util.pm +++ b/lib/Moose/Util.pm @@ -10,11 +10,7 @@ use Scalar::Util 'blessed'; use List::Util qw(first); use List::MoreUtils qw(any all); use overload (); -use Class::MOP 0.60; - -our $VERSION = '1.15'; -$VERSION = eval $VERSION; -our $AUTHORITY = 'cpan:STEVAN'; +use Class::MOP; my @exports = qw[ find_meta @@ -100,7 +96,18 @@ sub _apply_all_roles { Moose->throw_error("Must specify at least one role to apply to $applicant"); } - my $roles = Data::OptList::mkopt( [@_] ); + # If @_ contains role meta objects, mkopt will think that they're values, + # because they're references. In other words (roleobj1, roleobj2, + # roleobj3) will become [ [ roleobj1, roleobj2 ], [ roleobj3, undef ] ] + # -- this is no good. We'll preprocess @_ first to eliminate the potential + # bug. + # -- rjbs, 2011-04-08 + my $roles = Data::OptList::mkopt( [@_], { + moniker => 'role', + name_test => sub { + ! ref $_[0] or blessed($_[0]) && $_[0]->isa('Moose::Meta::Role') + } + }); my @role_metas; foreach my $role (@$roles) { @@ -309,7 +316,7 @@ sub _reconcile_roles_for_metaclass { # handle the case where we need to fix compatibility between a class and # its parent, but all roles in the class are already also done by the # parent - # see t/050/054.t + # see t/metaclasses/metaclass_compat_no_fixing_bug.t return $super_meta_name unless @role_differences; @@ -322,16 +329,20 @@ sub _reconcile_roles_for_metaclass { sub _role_differences { my ($class_meta_name, $super_meta_name) = @_; - my @super_role_metas = $super_meta_name->meta->can('calculate_all_roles_with_inheritance') - ? $super_meta_name->meta->calculate_all_roles_with_inheritance - : $super_meta_name->meta->can('calculate_all_roles') - ? $super_meta_name->meta->calculate_all_roles - : (); - my @role_metas = $class_meta_name->meta->can('calculate_all_roles_with_inheritance') - ? $class_meta_name->meta->calculate_all_roles_with_inheritance - : $class_meta_name->meta->can('calculate_all_roles') - ? $class_meta_name->meta->calculate_all_roles - : (); + my @super_role_metas + = grep { !$_->isa('Moose::Meta::Role::Composite') } + $super_meta_name->meta->can('calculate_all_roles_with_inheritance') + ? $super_meta_name->meta->calculate_all_roles_with_inheritance + : $super_meta_name->meta->can('calculate_all_roles') + ? $super_meta_name->meta->calculate_all_roles + : (); + my @role_metas + = grep { !$_->isa('Moose::Meta::Role::Composite') } + $class_meta_name->meta->can('calculate_all_roles_with_inheritance') + ? $class_meta_name->meta->calculate_all_roles_with_inheritance + : $class_meta_name->meta->can('calculate_all_roles') + ? $class_meta_name->meta->calculate_all_roles + : (); my @differences; for my $role_meta (@role_metas) { push @differences, $role_meta @@ -449,14 +460,12 @@ sub _is_role_only_subclass { 1; +# ABSTRACT: Utilities for working with Moose classes + __END__ =pod -=head1 NAME - -Moose::Util - Utilities for working with Moose classes - =head1 SYNOPSIS use Moose::Util qw/find_meta does_role search_class_by_role/; @@ -583,24 +592,5 @@ Here is a list of possible functions to write See L for details on reporting bugs. -=head1 AUTHOR - -Anders Nor Berle Edebolaz@gmail.comE - -B - -Robert (phaylon) Sedlacek - -Stevan Little - -=head1 COPYRIGHT AND LICENSE - -Copyright 2007-2009 by Infinity Interactive, Inc. - -L - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. - =cut