1 package Mouse::Meta::Module;
5 use Mouse::Util qw/get_code_info/;
8 sub name { $_[0]->{package} }
9 sub _method_map{ $_[0]->{methods} }
12 sub version { no strict 'refs'; ${shift->name.'::VERSION'} }
13 sub authority { no strict 'refs'; ${shift->name.'::AUTHORITY'} }
18 ($self->version || ()),
19 ($self->authority || ()),
25 my $name = $_[0]->{package};
27 return \%{ $name . '::' };
31 my($self, $name, $code) = @_;
34 confess "You must pass a defined name";
36 if(ref($code) ne 'CODE'){
37 confess "You must pass a CODE reference";
40 $self->_method_map->{$name}++; # Moose stores meta object here.
42 my $pkg = $self->name;
44 no warnings 'redefine';
45 *{ $pkg . '::' . $name } = $code;
48 sub _code_is_mine { # taken from Class::MOP::Class
\r
49 my ( $self, $code ) = @_;
\r
51 my ( $code_package, $code_name ) = get_code_info($code);
\r
53 return $code_package && $code_package eq $self->name
\r
54 || ( $code_package eq 'constant' && $code_name eq '__ANON__' );
\r
58 my($self, $method_name) = @_;
60 return 1 if $self->_method_map->{$method_name};
61 my $code = $self->name->can($method_name);
63 return $code && $self->_code_is_mine($code);
68 sub get_method_list {
\r
71 return grep { $self->has_method($_) } keys %{ $self->namespace };
\r
74 sub get_attribute_map { $_[0]->{attributes} }
75 sub has_attribute { exists $_[0]->{attributes}->{$_[1]} }
76 sub get_attribute { $_[0]->{attributes}->{$_[1]} }
77 sub get_attribute_list {
79 keys %{$self->get_attribute_map};
89 Mouse::Meta::Module - Common base class for Mouse::Meta::Class and Mouse::Meta::Role