4 package MooseX::MethodAttributes;
7 # ABSTRACT: code attribute introspection
11 use Moose::Util::MetaRole;
12 use Moose::Util qw/find_meta does_role/;
13 # Ensure trait is registered
14 use MooseX::MethodAttributes::Role::Meta::Role ();
17 Moose::Exporter->setup_import_methods;
20 my ($class, %options) = @_;
22 my $for_class = $options{for_class};
23 my $meta = find_meta($for_class);
26 && does_role($meta, 'MooseX::MethodAttributes::Role::Meta::Class')
27 && does_role($meta->method_metaclass, 'MooseX::MethodAttributes::Role::Meta::Method')
28 && does_role($meta->wrapped_method_metaclass, 'MooseX::MethodAttributes::Role::Meta::Method::MaybeWrapped');
30 $meta = Moose::Meta::Class->initialize( $for_class )
33 $meta = Moose::Util::MetaRole::apply_metaclass_roles(
34 for_class => $for_class,
35 metaclass_roles => ['MooseX::MethodAttributes::Role::Meta::Class'],
36 method_metaclass_roles => ['MooseX::MethodAttributes::Role::Meta::Method'],
37 wrapped_method_metaclass_roles => ['MooseX::MethodAttributes::Role::Meta::Method::MaybeWrapped'],
40 $for_class = $meta->name;
41 Moose::Util::MetaRole::apply_base_class_roles(
42 for_class => $for_class,
43 roles => ['MooseX::MethodAttributes::Role::AttrContainer'],
57 MooseX::MethodAttributes - code attribute introspection
68 use MooseX::MethodAttributes;
70 sub foo : Bar Baz('corge') { ... }
72 my $attrs = MyClass->meta->get_method('foo')->attributes; # ["Bar", "Baz('corge')"]
76 This module allows code attributes of methods to be introspected using Moose
89 Florian Ragwitz <rafl@debian.org>
90 Tomas Doran <bobtfish@bobtfish.net>
92 =head1 COPYRIGHT AND LICENSE
94 This software is copyright (c) 2009 by Florian Ragwitz.
96 This is free software; you can redistribute it and/or modify it under
97 the same terms as perl itself.