X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose.pm;h=54a02f2e1563443739fe5dbe8dff0fe35bb74ed8;hb=b79a1a50846cab298dfad2d67f9579c1159ba2cc;hp=537a92324513a14c7af7a5c9a2c4a9a793e4e8b5;hpb=7f1b08f6a7509fb22b2e44d632725db8c7b9090a;p=gitmo%2FMoose.git diff --git a/lib/Moose.pm b/lib/Moose.pm index 537a923..54a02f2 100644 --- a/lib/Moose.pm +++ b/lib/Moose.pm @@ -4,7 +4,7 @@ use warnings; use 5.008; -our $VERSION = '1.14'; +our $VERSION = '1.15'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -14,7 +14,7 @@ use Carp 'confess'; use Moose::Deprecated; use Moose::Exporter; -use Class::MOP 1.09; +use Class::MOP 1.10; use Moose::Meta::Class; use Moose::Meta::TypeConstraint; @@ -153,6 +153,7 @@ sub init_meta { or Moose->throw_error("Cannot call init_meta without specifying a for_class"); my $base_class = $args{base_class} || 'Moose::Object'; my $metaclass = $args{metaclass} || 'Moose::Meta::Class'; + my $meta_name = exists $args{meta_name} ? $args{meta_name} : 'meta'; Moose->throw_error("The Metaclass $metaclass must be a subclass of Moose::Meta::Class.") unless $metaclass->isa('Moose::Meta::Class'); @@ -198,10 +199,19 @@ sub init_meta { $meta = $metaclass->initialize($class); } - unless ( $meta->has_method("meta") ) { # don't overwrite + if (defined $meta_name) { # also check for inherited non moose 'meta' method? - # FIXME also skip this if the user requested by passing an option - $meta->_add_meta_method; + my $existing = $meta->get_method($meta_name); + if ($existing && !$existing->isa('Class::MOP::Method::Meta')) { + Carp::cluck "Moose is overwriting an existing method named " + . "$meta_name in class $class with a method " + . "which returns the class's metaclass. If this is " + . "actually what you want, you should remove the " + . "existing method, otherwise, you should rename or " + . "disable this generated method using the " + . "'-meta_name' option to 'use Moose'."; + } + $meta->_add_meta_method($meta_name); } # make sure they inherit from Moose::Object