-
package Moose::Role;
+use strict;
+use warnings;
use Scalar::Util 'blessed';
use Carp 'croak';
use Sub::Exporter;
-our $VERSION = '0.83';
+our $VERSION = '0.93';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
}
sub with {
- Moose::Util::apply_all_roles( Moose::Meta::Role->initialize(shift), @_ );
+ Moose::Util::apply_all_roles( shift, @_ );
}
sub requires {
- my $meta = Moose::Meta::Role->initialize(shift);
+ my $meta = shift;
croak "Must specify at least one method" unless @_;
$meta->add_required_methods(@_);
}
sub excludes {
- my $meta = Moose::Meta::Role->initialize(shift);
+ my $meta = shift;
croak "Must specify at least one role" unless @_;
$meta->add_excluded_roles(@_);
}
sub has {
- my $meta = Moose::Meta::Role->initialize(shift);
+ my $meta = shift;
my $name = shift;
croak 'Usage: has \'name\' => ( key => value, ... )' if @_ == 1;
my %options = ( definition_context => Moose::Util::_caller_info(), @_ );
sub _add_method_modifier {
my $type = shift;
- my $meta = Moose::Meta::Role->initialize(shift);
+ my $meta = shift;
my $code = pop @_;
for (@_) {
}
sub override {
- my $meta = Moose::Meta::Role->initialize(shift);
+ my $meta = shift;
my ( $name, $code ) = @_;
$meta->add_override_method_modifier( $name, $code );
}
}
Moose::Exporter->setup_import_methods(
- with_caller => [
- qw( with requires excludes has before after around override make_immutable )
+ with_meta => [
+ qw( with requires excludes has before after around override )
],
as_is => [
qw( extends super inner augment ),
=head1 DESCRIPTION
-The concept of roles is documented in L<Moose::Manual::Role>. This document
+The concept of roles is documented in L<Moose::Manual::Roles>. This document
serves as API documentation.
=head1 EXPORTED FUNCTIONS
Roles can require that certain methods are implemented by any class which
C<does> the role.
+Note that attribute accessors also count as methods for the purposes
+of satisfying the requirements of a role.
+
=item B<excludes (@role_names)>
Roles can C<exclude> other roles, in effect saying "I can never be combined
This is very similar to the attribute traits feature. When you do
this, your class's C<meta> object will have the specified traits
-applied to it. See L<Moose/TRAIT NAME RESOLUTION> for more details.
+applied to it. See L<Moose/Metaclass and Trait Name Resolution> for more
+details.
+
+=head1 APPLYING ROLES
+
+In addition to being applied to a class using the 'with' syntax (see
+L<Moose::Manual::Roles>) and using the L<Moose::Util> 'apply_all_roles'
+method, roles may also be applied to an instance of a class using
+L<Moose::Util> 'apply_all_roles' or the role's metaclass:
+
+ MyApp::Test::SomeRole->meta->apply( $instance );
+
+Doing this creates a new, mutable, anonymous subclass, applies the role to that,
+and reblesses. In a debugger, for example, you will see class names of the
+form C< Class::MOP::Class::__ANON__::SERIAL::6 >, which means that doing a 'ref'
+on your instance may not return what you expect. See L<Moose::Object> for 'DOES'.
+
+Additional params may be added to the new instance by providing 'rebless_params'.
+See L<Moose::Meta::Role::Application::ToInstance>.
=head1 CAVEATS
=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
=head1 COPYRIGHT AND LICENSE
-Copyright 2006-2009 by Infinity Interactive, Inc.
+Copyright 2006-2010 by Infinity Interactive, Inc.
L<http://www.iinteractive.com>