1 package Moose::Meta::Role::Composite;
8 use Scalar::Util 'blessed';
10 our $VERSION = '0.53';
11 our $AUTHORITY = 'cpan:STEVAN';
13 use base 'Moose::Meta::Role';
16 # we need to override the ->name
17 # method from Class::MOP::Package
18 # since we don't have an actual
21 __PACKAGE__->meta->add_attribute('name' => (reader => 'name'));
24 # Again, since we don't have a real
25 # package to store our methods in,
26 # we use a HASH ref instead.
28 __PACKAGE__->meta->add_attribute('methods' => (
29 reader => 'get_method_map',
34 my ($class, %params) = @_;
35 # the roles param is required ...
36 ($_->isa('Moose::Meta::Role'))
37 || confess "The list of roles must be instances of Moose::Meta::Role, not $_"
38 foreach @{$params{roles}};
39 # and the name is created from the
40 # roles if one has not been provided
41 $params{name} ||= (join "|" => map { $_->name } @{$params{roles}});
42 $class->meta->new_object(%params);
46 # we need to override this cause
47 # we dont have that package I was
48 # talking about above.
51 my ($self, $method_name, $method) = @_;
52 (defined $method_name && $method_name)
53 || confess "You must define a method name";
55 # make sure to bless the
57 $method = $self->method_metaclass->wrap(
59 package_name => $self->name,
61 ) if !blessed($method);
63 $self->get_method_map->{$method_name} = $method;
74 Moose::Meta::Role::Composite - An object to represent the set of roles
88 =item B<get_method_map>
96 All complex software has bugs lurking in it, and this module is no
97 exception. If you find a bug please either email me, or add the bug
102 Stevan Little E<lt>stevan@iinteractive.comE<gt>
104 =head1 COPYRIGHT AND LICENSE
106 Copyright 2006-2008 by Infinity Interactive, Inc.
108 L<http://www.iinteractive.com>
110 This library is free software; you can redistribute it and/or modify
111 it under the same terms as Perl itself.