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