2 package MooseX::Role::Parameterized;
3 use Moose qw/extends around confess/;
5 extends 'Moose::Exporter';
7 use MooseX::Role::Parameterized::Meta::Role::Parameterizable;
9 our $CURRENT_METACLASS;
11 __PACKAGE__->setup_import_methods(
12 with_caller => ['parameter', 'role', 'has'],
19 $names = [$names] if !ref($names);
21 for my $name (@$names) {
22 $caller->meta->add_parameter($name, @_);
28 my $role_generator = shift;
29 $caller->meta->role_generator($role_generator);
35 return Moose::Role->init_meta(@_,
36 metaclass => 'MooseX::Role::Parameterized::Meta::Role::Parameterizable',
40 # give role a (&) prototype
41 around _make_wrapper => sub {
43 my ($self, $caller, $sub, $fq_name) = @_;
45 if ($fq_name =~ /::role$/) {
46 return sub (&) { $sub->($caller, @_) };
53 confess "has must be called within the role { ... } block."
54 unless $CURRENT_METACLASS;
59 $names = [$names] if !ref($names);
61 for my $name (@$names) {
62 $CURRENT_METACLASS->add_attribute($name, @_);