From: Florian Ragwitz Date: Mon, 13 Jul 2009 14:36:45 +0000 (+0200) Subject: Create metaclass attrs for the different composition classes. X-Git-Tag: 0.88~17 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=07de7559efe5cdab24437208a5eb74edd151bedb;p=gitmo%2FMoose.git Create metaclass attrs for the different composition classes. --- diff --git a/lib/Moose/Meta/Role.pm b/lib/Moose/Meta/Role.pm index 82ce504..402ed6d 100644 --- a/lib/Moose/Meta/Role.pm +++ b/lib/Moose/Meta/Role.pm @@ -142,6 +142,24 @@ $META->add_attribute( default => 'Moose::Meta::Role::Method::Conflicting', ); +$META->add_attribute( + 'application_to_class_class', + reader => 'application_to_class_class', + default => 'Moose::Meta::Role::Application::ToClass', +); + +$META->add_attribute( + 'application_to_role_class', + reader => 'application_to_role_class', + default => 'Moose::Meta::Role::Application::ToRole', +); + +$META->add_attribute( + 'application_to_instance_class', + reader => 'application_to_instance_class', + default => 'Moose::Meta::Role::Application::ToInstance', +); + ## some things don't always fit, so they go here ... sub add_attribute { @@ -478,18 +496,19 @@ sub apply { (blessed($other)) || Moose->throw_error("You must pass in an blessed instance"); + my $application_class; if ($other->isa('Moose::Meta::Role')) { - require Moose::Meta::Role::Application::ToRole; - return Moose::Meta::Role::Application::ToRole->new(@args)->apply($self, $other); + $application_class = $self->application_to_role_class; } elsif ($other->isa('Moose::Meta::Class')) { - require Moose::Meta::Role::Application::ToClass; - return Moose::Meta::Role::Application::ToClass->new(@args)->apply($self, $other); + $application_class = $self->application_to_class_class; } else { - require Moose::Meta::Role::Application::ToInstance; - return Moose::Meta::Role::Application::ToInstance->new(@args)->apply($self, $other); + $application_class = $self->application_to_instance_class; } + + Class::MOP::load_class($application_class); + return $application_class->new(@args)->apply($self, $other); } sub combine {