X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FRole%2FApplication.pm;h=7c0645926853a0d0041f735493670d70f12f76e2;hb=e462f6f3d260687b8f7372b112a50c5c2a2c431c;hp=a71f65c4c4dbc16dc11514dfb55e367687290e7f;hpb=709c321c3bdc9a36769c9a2b24723b5315439fd3;p=gitmo%2FMoose.git
diff --git a/lib/Moose/Meta/Role/Application.pm b/lib/Moose/Meta/Role/Application.pm
index a71f65c..7c06459 100644
--- a/lib/Moose/Meta/Role/Application.pm
+++ b/lib/Moose/Meta/Role/Application.pm
@@ -4,10 +4,63 @@ use strict;
use warnings;
use metaclass;
-our $VERSION = '0.01';
+our $VERSION = '1.05';
+$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
-sub new { (shift)->meta->new_object(@_) }
+__PACKAGE__->meta->add_attribute('method_exclusions' => (
+ init_arg => '-excludes',
+ reader => 'get_method_exclusions',
+ default => sub { [] }
+));
+
+__PACKAGE__->meta->add_attribute('method_aliases' => (
+ init_arg => '-alias',
+ reader => 'get_method_aliases',
+ default => sub { {} }
+));
+
+sub new {
+ my ($class, %params) = @_;
+
+ if ( exists $params{excludes} && !exists $params{'-excludes'} ) {
+ $params{'-excludes'} = delete $params{excludes};
+ }
+ if ( exists $params{alias} && !exists $params{'-alias'} ) {
+ $params{'-alias'} = delete $params{alias};
+ }
+
+ if ( exists $params{'-excludes'} ) {
+
+ # I wish we had coercion here :)
+ $params{'-excludes'} = (
+ ref $params{'-excludes'} eq 'ARRAY'
+ ? $params{'-excludes'}
+ : [ $params{'-excludes'} ]
+ );
+ }
+
+ $class->_new(\%params);
+}
+
+sub is_method_excluded {
+ my ($self, $method_name) = @_;
+ foreach (@{$self->get_method_exclusions}) {
+ return 1 if $_ eq $method_name;
+ }
+ return 0;
+}
+
+sub is_method_aliased {
+ my ($self, $method_name) = @_;
+ exists $self->get_method_aliases->{$method_name} ? 1 : 0
+}
+
+sub is_aliased_method {
+ my ($self, $method_name) = @_;
+ my %aliased_names = reverse %{$self->get_method_aliases};
+ exists $aliased_names{$method_name} ? 1 : 0;
+}
sub apply {
my $self = shift;
@@ -15,25 +68,25 @@ sub apply {
$self->check_role_exclusions(@_);
$self->check_required_methods(@_);
$self->check_required_attributes(@_);
-
+
$self->apply_attributes(@_);
- $self->apply_methods(@_);
-
+ $self->apply_methods(@_);
+
$self->apply_override_method_modifiers(@_);
-
+
$self->apply_before_method_modifiers(@_);
$self->apply_around_method_modifiers(@_);
$self->apply_after_method_modifiers(@_);
}
-sub check_role_exclusions { die "Abstract Method" }
-sub check_required_methods { die "Abstract Method" }
-sub check_required_attributes { die "Abstract Method" }
+sub check_role_exclusions { Carp::croak "Abstract Method" }
+sub check_required_methods { Carp::croak "Abstract Method" }
+sub check_required_attributes { Carp::croak "Abstract Method" }
-sub apply_attributes { die "Abstract Method" }
-sub apply_methods { die "Abstract Method" }
-sub apply_override_method_modifiers { die "Abstract Method" }
-sub apply_method_modifiers { die "Abstract Method" }
+sub apply_attributes { Carp::croak "Abstract Method" }
+sub apply_methods { Carp::croak "Abstract Method" }
+sub apply_override_method_modifiers { Carp::croak "Abstract Method" }
+sub apply_method_modifiers { Carp::croak "Abstract Method" }
sub apply_before_method_modifiers { (shift)->apply_method_modifiers('before' => @_) }
sub apply_around_method_modifiers { (shift)->apply_method_modifiers('around' => @_) }
@@ -47,12 +100,15 @@ __END__
=head1 NAME
-Moose::Meta::Role::Application
+Moose::Meta::Role::Application - A base class for role application
=head1 DESCRIPTION
This is the abstract base class for role applications.
+The API for this class and its subclasses still needs some
+consideration, and is intentionally not yet documented.
+
=head2 METHODS
=over 4
@@ -61,6 +117,16 @@ This is the abstract base class for role applications.
=item B
+=item B
+
+=item B
+
+=item B
+
+=item B
+
+=item B
+
=item B
=item B
@@ -87,9 +153,7 @@ This is the abstract base class for role applications.
=head1 BUGS
-All complex software has bugs lurking in it, and this module is no
-exception. If you find a bug please either email me, or add the bug
-to cpan-RT.
+See L for details on reporting bugs.
=head1 AUTHOR
@@ -97,7 +161,7 @@ Stevan Little Estevan@iinteractive.comE
=head1 COPYRIGHT AND LICENSE
-Copyright 2006-2008 by Infinity Interactive, Inc.
+Copyright 2006-2010 by Infinity Interactive, Inc.
L