1 package Moose::Meta::Role::Application;
7 our $VERSION = '0.89_02';
8 $VERSION = eval $VERSION;
9 our $AUTHORITY = 'cpan:STEVAN';
11 __PACKAGE__->meta->add_attribute('method_exclusions' => (
12 init_arg => '-excludes',
13 reader => 'get_method_exclusions',
17 __PACKAGE__->meta->add_attribute('method_aliases' => (
19 reader => 'get_method_aliases',
24 my ($class, %params) = @_;
26 if ( exists $params{excludes} && !exists $params{'-excludes'} ) {
27 $params{'-excludes'} = delete $params{excludes};
29 if ( exists $params{alias} && !exists $params{'-alias'} ) {
30 $params{'-alias'} = delete $params{alias};
33 if ( exists $params{'-excludes'} ) {
35 # I wish we had coercion here :)
36 $params{'-excludes'} = (
37 ref $params{'-excludes'} eq 'ARRAY'
38 ? $params{'-excludes'}
39 : [ $params{'-excludes'} ]
43 $class->_new(\%params);
46 sub is_method_excluded {
47 my ($self, $method_name) = @_;
48 foreach (@{$self->get_method_exclusions}) {
49 return 1 if $_ eq $method_name;
54 sub is_method_aliased {
55 my ($self, $method_name) = @_;
56 exists $self->get_method_aliases->{$method_name} ? 1 : 0
59 sub is_aliased_method {
60 my ($self, $method_name) = @_;
61 my %aliased_names = reverse %{$self->get_method_aliases};
62 exists $aliased_names{$method_name} ? 1 : 0;
68 $self->check_role_exclusions(@_);
69 $self->check_required_methods(@_);
70 $self->check_required_attributes(@_);
72 $self->apply_attributes(@_);
73 $self->apply_methods(@_);
75 $self->apply_override_method_modifiers(@_);
77 $self->apply_before_method_modifiers(@_);
78 $self->apply_around_method_modifiers(@_);
79 $self->apply_after_method_modifiers(@_);
82 sub check_role_exclusions { Carp::croak "Abstract Method" }
83 sub check_required_methods { Carp::croak "Abstract Method" }
84 sub check_required_attributes { Carp::croak "Abstract Method" }
86 sub apply_attributes { Carp::croak "Abstract Method" }
87 sub apply_methods { Carp::croak "Abstract Method" }
88 sub apply_override_method_modifiers { Carp::croak "Abstract Method" }
89 sub apply_method_modifiers { Carp::croak "Abstract Method" }
91 sub apply_before_method_modifiers { (shift)->apply_method_modifiers('before' => @_) }
92 sub apply_around_method_modifiers { (shift)->apply_method_modifiers('around' => @_) }
93 sub apply_after_method_modifiers { (shift)->apply_method_modifiers('after' => @_) }
103 Moose::Meta::Role::Application - A base class for role application
107 This is the abstract base class for role applications.
109 The API for this class and its subclasses still needs some
110 consideration, and is intentionally not yet documented.
120 =item B<get_method_exclusions>
122 =item B<is_method_excluded>
124 =item B<get_method_aliases>
126 =item B<is_aliased_method>
128 =item B<is_method_aliased>
132 =item B<check_role_exclusions>
134 =item B<check_required_methods>
136 =item B<check_required_attributes>
138 =item B<apply_attributes>
140 =item B<apply_methods>
142 =item B<apply_method_modifiers>
144 =item B<apply_before_method_modifiers>
146 =item B<apply_after_method_modifiers>
148 =item B<apply_around_method_modifiers>
150 =item B<apply_override_method_modifiers>
156 All complex software has bugs lurking in it, and this module is no
157 exception. If you find a bug please either email me, or add the bug
162 Stevan Little E<lt>stevan@iinteractive.comE<gt>
164 =head1 COPYRIGHT AND LICENSE
166 Copyright 2006-2009 by Infinity Interactive, Inc.
168 L<http://www.iinteractive.com>
170 This library is free software; you can redistribute it and/or modify
171 it under the same terms as Perl itself.