X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FRole%2FComposite.pm;h=57a86cddac924ecda79d5b75adee2af1677ff57e;hb=refs%2Ftags%2F0.82;hp=70c7971adadde8a695e04baa189d256a3a924efe;hpb=837d9c5734555b7da2100814f7bef46a926a58c8;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Role/Composite.pm b/lib/Mouse/Meta/Role/Composite.pm index 70c7971..57a86cd 100644 --- a/lib/Mouse/Meta/Role/Composite.pm +++ b/lib/Mouse/Meta/Role/Composite.pm @@ -4,6 +4,25 @@ use Mouse::Meta::Role; use Mouse::Meta::Role::Application; our @ISA = qw(Mouse::Meta::Role); +# FIXME: Mouse::Meta::Role::Composite does things in different way from Moose's +# Moose: creates a new class for the consumer, and applies roles to it. +# Mouse: creates a coposite role and apply roles to the role, +# and then applies it to the consumer. + +sub new { + my $class = shift; + my $args = $class->Mouse::Object::BUILDARGS(@_); + my $roles = delete $args->{roles}; + my $self = $class->create_anon_role(%{$args}); + foreach my $role_spec(@{$roles}) { + my($role, $args) = ref($role_spec) eq 'ARRAY' + ? @{$role_spec} + : ($role_spec, {}); + $role->apply($self, %{$args}); + } + return $self; +} + sub get_method_list { my($self) = @_; return keys %{ $self->{methods} }; @@ -137,7 +156,7 @@ Mouse::Meta::Role::Composite - An object to represent the set of roles =head1 VERSION -This document describes Mouse version 0.70 +This document describes Mouse version 0.82 =head1 SEE ALSO