rename alias and excludes to -alias and -excludes
[gitmo/Moose.git] / lib / Moose / Meta / Role / Application.pm
1 package Moose::Meta::Role::Application;
2
3 use strict;
4 use warnings;
5 use metaclass;
6
7 our $VERSION   = '0.89';
8 $VERSION = eval $VERSION;
9 our $AUTHORITY = 'cpan:STEVAN';
10
11 __PACKAGE__->meta->add_attribute('method_exclusions' => (
12     init_arg => '-excludes',
13     reader   => 'get_method_exclusions',
14     default  => sub { [] }
15 ));
16
17 __PACKAGE__->meta->add_attribute('method_aliases' => (
18     init_arg => '-alias',
19     reader   => 'get_method_aliases',
20     default  => sub { {} }
21 ));
22
23 sub new {
24     my ($class, %params) = @_;
25
26     if (exists $params{excludes} && !exists $params{'-excludes'}) {
27         $params{'-excludes'} = delete $params{excludes};
28     }
29     if (exists $params{alias} && !exists $params{'-alias'}) {
30         $params{'-alias'} = delete $params{alias};
31     }
32
33     if (exists $params{'-excludes'}) {
34         # I wish we had coercion here :)
35         $params{'-excludes'} = (ref $params{'-excludes'} eq 'ARRAY'
36                                 ? $params{'-excludes'}
37                                 : [ $params{'-excludes'} ]);
38     }
39
40     $class->_new(\%params);
41 }
42
43 sub is_method_excluded {
44     my ($self, $method_name) = @_;
45     foreach (@{$self->get_method_exclusions}) {
46         return 1 if $_ eq $method_name;
47     }
48     return 0;
49 }
50
51 sub is_method_aliased {
52     my ($self, $method_name) = @_;
53     exists $self->get_method_aliases->{$method_name} ? 1 : 0
54 }
55
56 sub is_aliased_method {
57     my ($self, $method_name) = @_;
58     my %aliased_names = reverse %{$self->get_method_aliases};
59     exists $aliased_names{$method_name} ? 1 : 0;
60 }
61
62 sub apply {
63     my $self = shift;
64
65     $self->check_role_exclusions(@_);
66     $self->check_required_methods(@_);
67     $self->check_required_attributes(@_);
68
69     $self->apply_attributes(@_);
70     $self->apply_methods(@_);
71
72     $self->apply_override_method_modifiers(@_);
73
74     $self->apply_before_method_modifiers(@_);
75     $self->apply_around_method_modifiers(@_);
76     $self->apply_after_method_modifiers(@_);
77 }
78
79 sub check_role_exclusions           { Carp::croak "Abstract Method" }
80 sub check_required_methods          { Carp::croak "Abstract Method" }
81 sub check_required_attributes       { Carp::croak "Abstract Method" }
82
83 sub apply_attributes                { Carp::croak "Abstract Method" }
84 sub apply_methods                   { Carp::croak "Abstract Method" }
85 sub apply_override_method_modifiers { Carp::croak "Abstract Method" }
86 sub apply_method_modifiers          { Carp::croak "Abstract Method" }
87
88 sub apply_before_method_modifiers   { (shift)->apply_method_modifiers('before' => @_) }
89 sub apply_around_method_modifiers   { (shift)->apply_method_modifiers('around' => @_) }
90 sub apply_after_method_modifiers    { (shift)->apply_method_modifiers('after'  => @_) }
91
92 1;
93
94 __END__
95
96 =pod
97
98 =head1 NAME
99
100 Moose::Meta::Role::Application - A base class for role application
101
102 =head1 DESCRIPTION
103
104 This is the abstract base class for role applications.
105
106 The API for this class and its subclasses still needs some
107 consideration, and is intentionally not yet documented.
108
109 =head2 METHODS
110
111 =over 4
112
113 =item B<new>
114
115 =item B<meta>
116
117 =item B<get_method_exclusions>
118
119 =item B<is_method_excluded>
120
121 =item B<get_method_aliases>
122
123 =item B<is_aliased_method>
124
125 =item B<is_method_aliased>
126
127 =item B<apply>
128
129 =item B<check_role_exclusions>
130
131 =item B<check_required_methods>
132
133 =item B<check_required_attributes>
134
135 =item B<apply_attributes>
136
137 =item B<apply_methods>
138
139 =item B<apply_method_modifiers>
140
141 =item B<apply_before_method_modifiers>
142
143 =item B<apply_after_method_modifiers>
144
145 =item B<apply_around_method_modifiers>
146
147 =item B<apply_override_method_modifiers>
148
149 =back
150
151 =head1 BUGS
152
153 All complex software has bugs lurking in it, and this module is no
154 exception. If you find a bug please either email me, or add the bug
155 to cpan-RT.
156
157 =head1 AUTHOR
158
159 Stevan Little E<lt>stevan@iinteractive.comE<gt>
160
161 =head1 COPYRIGHT AND LICENSE
162
163 Copyright 2006-2009 by Infinity Interactive, Inc.
164
165 L<http://www.iinteractive.com>
166
167 This library is free software; you can redistribute it and/or modify
168 it under the same terms as Perl itself.
169
170 =cut
171