X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=lib%2FMouse%2FRole.pm;h=59cccd228fdaa3f286b52ce21ef365b49f4f7045;hp=710473622d1308ede945eeb4322b22774bb39a69;hb=1b9e472d8c7e704eced9b2ea83194f83f0265018;hpb=ff6870694bb440c13826e0f0fa25e760247fd24e diff --git a/lib/Mouse/Role.pm b/lib/Mouse/Role.pm index 7104736..59cccd2 100644 --- a/lib/Mouse/Role.pm +++ b/lib/Mouse/Role.pm @@ -3,13 +3,24 @@ use strict; use warnings; use base 'Exporter'; -use Carp 'confess', 'croak'; +use Carp 'confess'; use Scalar::Util 'blessed'; -use Mouse::Meta::Role; -use Mouse::Util qw(load_class); +use Mouse::Util qw(load_class not_supported); +use Mouse (); + +our @EXPORT = qw( + extends with + has + before after around + override super + augment inner + + requires excludes + + blessed confess +); -our @EXPORT = qw(before after around super override inner augment has extends with requires excludes confess blessed); our %is_removable = map{ $_ => undef } @EXPORT; delete $is_removable{confess}; delete $is_removable{blessed}; @@ -56,8 +67,8 @@ sub override { my $fullname = "${classname}::${name}"; defined &$fullname - && confess "Cannot add an override of method '$fullname' " . - "because there is a local version of '$fullname'"; + && $meta->throw_error("Cannot add an override of method '$fullname' " + . "because there is a local version of '$fullname'"); $meta->add_override_method_modifier($name => sub { local $Mouse::SUPER_PACKAGE = shift; @@ -70,23 +81,23 @@ sub override { # We keep the same errors messages as Moose::Role emits, here. sub inner { - croak "Moose::Role cannot support 'inner'"; + Carp::croak "Roles cannot support 'inner'"; } sub augment { - croak "Moose::Role cannot support 'augment'"; + Carp::croak "Roles cannot support 'augment'"; } sub has { my $meta = Mouse::Meta::Role->initialize(scalar caller); - my $name = shift; - my %opts = @_; - $meta->add_attribute($name => \%opts); + $meta->add_attribute($_ => @_) for ref($name) ? @{$name} : $name; } -sub extends { confess "Roles do not support 'extends'" } +sub extends { + Carp::croak "Roles do not support 'extends'" +} sub with { my $meta = Mouse::Meta::Role->initialize(scalar caller); @@ -95,11 +106,13 @@ sub with { sub requires { my $meta = Mouse::Meta::Role->initialize(scalar caller); - Carp::croak "Must specify at least one method" unless @_; + $meta->throw_error("Must specify at least one method") unless @_; $meta->add_required_methods(@_); } -sub excludes { confess "Mouse::Role does not currently support 'excludes'" } +sub excludes { + not_supported; +} sub import { my $class = shift;