use Carp 'confess';
use Class::MOP ();
-our $VERSION = '0.03';
+our $VERSION = '0.04';
our $AUTHORITY = 'cpan:STEVAN';
my @exports = qw[
apply_all_roles
get_all_init_args
get_all_attribute_values
+ resolve_metatrait_alias
+ resolve_metaclass_alias
];
Sub::Exporter::setup_exporter({
my $meta = find_meta($class_or_obj);
return unless defined $meta;
-
+ return unless $meta->can('does_role');
return 1 if $meta->does_role($role);
return;
}
my $meta = (blessed $applicant ? $applicant : find_meta($applicant));
- Class::MOP::load_class($_->[0]) for @$roles;
+ foreach my $role_spec (@$roles) {
+ Class::MOP::load_class($role_spec->[0]);
+ }
($_->[0]->can('meta') && $_->[0]->meta->isa('Moose::Meta::Role'))
|| confess "You can only consume roles, " . $_->[0] . " is not a Moose role"
};
}
+sub resolve_metatrait_alias {
+ resolve_metaclass_alias( @_, trait => 1 );
+}
+
+sub resolve_metaclass_alias {
+ my ( $type, $metaclass_name, %options ) = @_;
+
+ if ( my $resolved = eval {
+ my $possible_full_name = 'Moose::Meta::' . $type . '::Custom::' . ( $options{trait} ? "Trait::" : "" ) . $metaclass_name;
+
+ Class::MOP::load_class($possible_full_name);
+
+ $possible_full_name->can('register_implementation')
+ ? $possible_full_name->register_implementation
+ : $possible_full_name;
+ } ) {
+ return $resolved;
+ } else {
+ Class::MOP::load_class($metaclass_name);
+ return $metaclass_name;
+ }
+}
+
1;
=head1 DESCRIPTION
-This is a set of utility functions to help working with Moose classes. This
-is an experimental module, and it's not 100% clear what purpose it will serve.
-That said, ideas, suggestions and contributions to this collection are most
-welcome. See the L<TODO> section below for a list of ideas for possible
-functions to write.
+This is a set of utility functions to help working with Moose classes, and
+is used internally by Moose itself. The goal is to provide useful functions
+that for both Moose users and Moose extenders (MooseX:: authors).
+
+This is a relatively new addition to the Moose toolchest, so ideas,
+suggestions and contributions to this collection are most welcome.
+See the L<TODO> section below for a list of ideas for possible functions
+to write.
=head1 EXPORTED FUNCTIONS
and the values are the instance's fields. Attributes without an C<init_arg>
will be skipped.
+=item B<resolve_metaclass_alias($category, $name, %options)>
+
+=item B<resolve_metatrait_alias($category, $name, %options)>
+
+Resolve a short name like in e.g.
+
+ has foo => (
+ metaclass => "Bar",
+ );
+
+to a full class name.
+
=back
=head1 TODO