package Mouse::Meta::Role;
-use Mouse::Util qw(:meta not_supported english_list); # enables strict and warnings
+use Mouse::Util qw(:meta not_supported); # enables strict and warnings
use Mouse::Meta::Module;
our @ISA = qw(Mouse::Meta::Module);
$role->throw_error(sprintf "'%s' requires the method%s %s to be implemented by '%s'",
$role->name,
(@missing == 1 ? '' : 's'), # method or methods
- english_list(map{ sprintf q{'%s'}, $_ } @missing),
+ Mouse::Util::quoted_english_list(@missing),
$consumer_class_name);
}
}
}
sub _apply_attributes{
- my($role, $consumer, $args) = @_;
+ #my($role, $consumer, $args) = @_;
+ my($role, $consumer) = @_;
for my $attr_name ($role->get_attribute_list) {
next if $consumer->has_attribute($attr_name);
}
sub _apply_modifiers{
- my($role, $consumer, $args) = @_;
+ #my($role, $consumer, $args) = @_;
+ my($role, $consumer) = @_;
+
if(my $modifiers = $role->{override_method_modifiers}){
foreach my $method_name (keys %{$modifiers}){
}
for my $modifier_type (qw/before around after/) {
- my $modifiers = $role->{"${modifier_type}_method_modifiers"}
+ my $table = $role->{"${modifier_type}_method_modifiers"}
or next;
my $add_modifier = "add_${modifier_type}_method_modifier";
- foreach my $method_name (keys %{$modifiers}){
- foreach my $code(@{ $modifiers->{$method_name} }){
+ while(my($method_name, $modifiers) = each %{$table}){
+ foreach my $code(@{ $modifiers }){
next if $consumer->{"_applied_$modifier_type"}{$method_name, $code}++; # skip applied modifiers
$consumer->$add_modifier($method_name => $code);
}
}
sub _append_roles{
- my($role, $consumer, $args) = @_;
+ #my($role, $consumer, $args) = @_;
+ my($role, $consumer) = @_;
- my $roles = ($args->{_to} eq 'role') ? $consumer->get_roles : $consumer->roles;
+ my $roles = $consumer->{roles};
foreach my $r($role, @{$role->get_roles}){
- if(!$consumer->does_role($r->name)){
+ if(!$consumer->does_role($r)){
push @{$roles}, $r;
}
}
sub combine {
- my($role_class, @role_specs) = @_;
+ my($self, @role_specs) = @_;
require 'Mouse/Meta/Role/Composite.pm'; # we don't want to create its namespace
return $composite;
}
-sub add_before_method_modifier {
- my ($self, $method_name, $method) = @_;
+sub add_before_method_modifier;
+sub add_around_method_modifier;
+sub add_after_method_modifier;
- push @{ $self->{before_method_modifiers}{$method_name} ||= [] }, $method;
- return;
-}
-sub add_around_method_modifier {
- my ($self, $method_name, $method) = @_;
-
- push @{ $self->{around_method_modifiers}{$method_name} ||= [] }, $method;
- return;
-}
-sub add_after_method_modifier {
- my ($self, $method_name, $method) = @_;
-
- push @{ $self->{after_method_modifiers}{$method_name} ||= [] }, $method;
- return;
-}
-
-sub get_before_method_modifiers {
- my ($self, $method_name) = @_;
- return @{ $self->{before_method_modifiers}{$method_name} ||= [] }
-}
-sub get_around_method_modifiers {
- my ($self, $method_name) = @_;
- return @{ $self->{around_method_modifiers}{$method_name} ||= [] }
-}
-sub get_after_method_modifiers {
- my ($self, $method_name) = @_;
- return @{ $self->{after_method_modifiers}{$method_name} ||= [] }
-}
+sub get_before_method_modifiers;
+sub get_around_method_modifiers;
+sub get_after_method_modifiers;
sub add_override_method_modifier{
my($self, $method_name, $method) = @_;
(defined $role_name)
|| $self->throw_error("You must supply a role name to look for");
+ $role_name = $role_name->name if ref $role_name;
+
# if we are it,.. then return true
return 1 if $role_name eq $self->name;
# otherwise.. check our children
=head1 VERSION
-This document describes Mouse version 0.49
+This document describes Mouse version 0.54
=head1 SEE ALSO