From: Stevan Little <stevan.little@iinteractive.com> Date: Tue, 26 Feb 2008 15:42:39 +0000 (+0000) Subject: ovidsbug X-Git-Tag: 0_55~292 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=9c10b5ad9c24b7d09982daa5e07cf009222049cf;p=gitmo%2FMoose.git ovidsbug --- diff --git a/Changes b/Changes index a14b044..29d8b9b 100644 --- a/Changes +++ b/Changes @@ -6,6 +6,12 @@ Revision history for Perl extension Moose that come from recently composed roles. It makes sense, people are using it, and so why not just officially support it. + - fixing the 'extends' keyword so that it will not + trigger Ovid's bug (http://use.perl.org/~Ovid/journal/35763) + + * Moose::Util + - fixing the 'apply_all_roles' keyword so that it will not + trigger Ovid's bug (http://use.perl.org/~Ovid/journal/35763) * t/ - making test for using '+name' on attributes consumed diff --git a/lib/Moose.pm b/lib/Moose.pm index 1fe7548..0b49926 100644 --- a/lib/Moose.pm +++ b/lib/Moose.pm @@ -82,13 +82,17 @@ use Moose::Util (); my $class = $CALLER; return subname 'Moose::extends' => sub (@) { confess "Must derive at least one class" unless @_; - Class::MOP::load_class($_) for @_; + + my @supers = @_; + foreach my $super (@supers) { + Class::MOP::load_class($super); + } # this checks the metaclass to make sure # it is correct, sometimes it can get out # of sync when the classes are being built - my $meta = $class->meta->_fix_metaclass_incompatability(@_); - $meta->superclasses(@_); + my $meta = $class->meta->_fix_metaclass_incompatability(@supers); + $meta->superclasses(@supers); }; }, with => sub { diff --git a/lib/Moose/Meta/Instance.pm b/lib/Moose/Meta/Instance.pm index 0e9baac..addaa97 100644 --- a/lib/Moose/Meta/Instance.pm +++ b/lib/Moose/Meta/Instance.pm @@ -30,8 +30,8 @@ This class provides the low level data storage abstractions for attributes. Using this API generally violates attribute encapsulation and is not reccomended, instead look at L<Class::MOP::Attribute/get_value>, L<Class::MOP::Attribute/set_value>, etc, as well as L<Moose::Meta::Attribute> -for the reccomended way to fiddle with attribute values in a generic way, -independant of how/whether accessors have been defined. Accessors can be found +for the recommended way to fiddle with attribute values in a generic way, +independent of how/whether accessors have been defined. Accessors can be found using L<Class::MOP::Class/get_attribute>. See the L<Class::MOP::Instance> docs for details on the instance protocol. diff --git a/lib/Moose/Util.pm b/lib/Moose/Util.pm index 466e2aa..5d1ba37 100644 --- a/lib/Moose/Util.pm +++ b/lib/Moose/Util.pm @@ -8,7 +8,7 @@ use Scalar::Util 'blessed'; use Carp 'confess'; use Class::MOP (); -our $VERSION = '0.03'; +our $VERSION = '0.04'; our $AUTHORITY = 'cpan:STEVAN'; my @exports = qw[ @@ -78,7 +78,9 @@ sub apply_all_roles { my $meta = (blessed $applicant ? $applicant : find_meta($applicant)); - Class::MOP::load_class($_->[0]) for @$roles; + foreach my $role_spec (@$roles) { + Class::MOP::load_class($role_spec->[0]); + } ($_->[0]->can('meta') && $_->[0]->meta->isa('Moose::Meta::Role')) || confess "You can only consume roles, " . $_->[0] . " is not a Moose role"