error_class and error_builder are readonly in immutable classes
[gitmo/Moose.git] / lib / Moose / Meta / Role / Application.pm
index 13da2c9..f59bda2 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use metaclass;
 
-our $VERSION   = '0.01';
+our $VERSION   = '0.50';
 our $AUTHORITY = 'cpan:STEVAN';
 
 __PACKAGE__->meta->add_attribute('method_exclusions' => (
@@ -13,6 +13,12 @@ __PACKAGE__->meta->add_attribute('method_exclusions' => (
     default  => sub { [] }
 ));
 
+__PACKAGE__->meta->add_attribute('method_aliases' => (
+    init_arg => 'alias',
+    reader   => 'get_method_aliases',
+    default  => sub { {} }
+));
+
 sub new { 
     my ($class, %params) = @_;
     
@@ -34,6 +40,17 @@ sub is_method_excluded {
     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;
 
@@ -51,14 +68,14 @@ sub apply {
     $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' => @_) }
@@ -72,7 +89,7 @@ __END__
 
 =head1 NAME
 
-Moose::Meta::Role::Application
+Moose::Meta::Role::Application - A base class for role application
 
 =head1 DESCRIPTION
 
@@ -90,6 +107,12 @@ This is the abstract base class for role applications.
 
 =item B<is_method_excluded>
 
+=item B<get_method_aliases>
+
+=item B<is_aliased_method>
+
+=item B<is_method_aliased>
+
 =item B<apply>
 
 =item B<check_role_exclusions>