bump version to 1.09
[gitmo/Moose.git] / lib / Moose / Meta / Role / Application.pm
index 13da2c9..3119e0d 100644 (file)
@@ -4,26 +4,43 @@ use strict;
 use warnings;
 use metaclass;
 
-our $VERSION   = '0.01';
+our $VERSION   = '1.09';
+$VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
 __PACKAGE__->meta->add_attribute('method_exclusions' => (
-    init_arg => 'excludes',
+    init_arg => '-excludes',
     reader   => 'get_method_exclusions',
     default  => sub { [] }
 ));
 
-sub new { 
+__PACKAGE__->meta->add_attribute('method_aliases' => (
+    init_arg => '-alias',
+    reader   => 'get_method_aliases',
+    default  => sub { {} }
+));
+
+sub new {
     my ($class, %params) = @_;
-    
-    if (exists $params{excludes}) {
+
+    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} ]);
+        $params{'-excludes'} = (
+            ref $params{'-excludes'} eq 'ARRAY'
+            ? $params{'-excludes'}
+            : [ $params{'-excludes'} ]
+        );
     }
-    
-    $class->meta->new_object(%params);
+
+    $class->_new(\%params);
 }
 
 sub is_method_excluded {
@@ -34,31 +51,42 @@ 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;
 
     $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' => @_) }
@@ -72,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
@@ -90,6 +121,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>
@@ -116,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<Moose/BUGS> for details on reporting bugs.
 
 =head1 AUTHOR
 
@@ -126,7 +161,7 @@ Stevan Little E<lt>stevan@iinteractive.comE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright 2006-2008 by Infinity Interactive, Inc.
+Copyright 2006-2010 by Infinity Interactive, Inc.
 
 L<http://www.iinteractive.com>