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