d2e40adaa55c2c7b3f2241019013e7c6ad62faea
[gitmo/MooseX-Role-Parameterized.git] / lib / MooseX / Role / Parameterized.pm
1 #!/usr/bin/env perl
2 package MooseX::Role::Parameterized;
3 use Moose;
4 use Moose::Role ();
5 extends 'Moose::Exporter';
6
7 use MooseX::Role::Parameterized::Meta::Role;
8
9 __PACKAGE__->setup_import_methods(
10     with_caller => ['parameter', 'role'],
11 );
12
13 sub parameter {
14     my $caller = shift;
15     $caller->meta->add_parameter(@_);
16 }
17
18 sub role {
19     my $caller         = shift;
20     my $role_generator = shift;
21     $caller->meta->role_generator($role_generator);
22 }
23
24 sub init_meta {
25     my $self = shift;
26
27     return Moose::Role->init_meta(@_,
28         metaclass => 'MooseX::Role::Parameterized::Meta::Role',
29     );
30 }
31
32 # give role a (&) prototype
33 around _make_wrapper => sub {
34     my $orig = shift;
35     my ($self, $caller, $sub, $fq_name) = @_;
36
37     if ($fq_name =~ /::role$/) {
38         return sub (&) { $sub->($caller, @_) };
39     }
40
41     return $orig->(@_);
42 };
43
44 1;
45