X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FRole.pm;h=0e343d31359bc3612c944111c2ddfd7e7a12c54b;hb=eae0508f6f8fca847956c2ed8c48ec23cebd3106;hp=a168f90fe78d3ad39cf5e22e90ba1350f0c583a8;hpb=8a0bfed95902cbe3dec51782514466cace3e1ce1;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Role.pm b/lib/Moose/Meta/Role.pm index a168f90..0e343d3 100644 --- a/lib/Moose/Meta/Role.pm +++ b/lib/Moose/Meta/Role.pm @@ -10,13 +10,14 @@ use Carp 'confess'; use Sub::Name 'subname'; use Devel::GlobalDestruction 'in_global_destruction'; -our $VERSION = '0.79'; +our $VERSION = '0.81'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; use Moose::Meta::Class; use Moose::Meta::Role::Method; use Moose::Meta::Role::Method::Required; +use Moose::Meta::Role::Method::Conflicting; use base 'Class::MOP::Module'; @@ -65,9 +66,9 @@ foreach my $action ( name => 'required_methods', attr_reader => 'get_required_methods_map', methods => { - remove => 'remove_required_methods', - get_keys => 'get_required_method_list', - existence => 'requires_method', + remove => 'remove_required_methods', + get_values => 'get_required_method_list', + existence => 'requires_method', } }, { @@ -135,6 +136,12 @@ $META->add_attribute( default => 'Moose::Meta::Role::Method::Required', ); +$META->add_attribute( + 'conflicting_method_metaclass', + reader => 'conflicting_method_metaclass', + default => 'Moose::Meta::Role::Method::Conflicting', +); + ## some things don't always fit, so they go here ... sub add_attribute { @@ -168,6 +175,20 @@ sub add_required_methods { } } +sub add_conflicting_method { + my $self = shift; + + my $method; + if (@_ == 1 && blessed($_[0])) { + $method = shift; + } + else { + $method = $self->conflicting_method_metaclass->new(@_); + } + + $self->add_required_methods($method); +} + ## ------------------------------------------------------------------ ## method modifiers @@ -930,6 +951,11 @@ Adds the named methods to the role's list of required methods. Removes the named methods from the role's list of required methods. +=item B<< $metarole->add_conflicting_method(%params) >> + +Instantiate the parameters as a L +object, then add it to the required method list. + =back =head2 Method modifiers