Commit | Line | Data |
7b42fc96 |
1 | #!/usr/bin/env perl |
2 | package MooseX::Role::Parameterized; |
5b82ffb1 |
3 | use Moose; |
7b42fc96 |
4 | use Moose::Role (); |
5b82ffb1 |
5 | extends 'Moose::Exporter'; |
7b42fc96 |
6 | |
5b82ffb1 |
7 | use MooseX::Role::Parameterized::Meta::Role; |
8 | |
9 | __PACKAGE__->setup_import_methods( |
10 | with_caller => ['parameter', 'role'], |
19af6e75 |
11 | ); |
12 | |
13 | sub parameter { |
14 | my $caller = shift; |
15 | $caller->meta->add_parameter(@_); |
16 | } |
7b42fc96 |
17 | |
5b82ffb1 |
18 | sub role { |
19 | my $caller = shift; |
20 | my $role_generator = shift; |
21 | $caller->meta->role_generator($role_generator); |
22 | } |
23 | |
7b42fc96 |
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 | |
5b82ffb1 |
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 | |
7b42fc96 |
44 | 1; |
45 | |