2 package MooseX::Role::Parameterized::Meta::Role::Parameterizable;
4 extends 'Moose::Meta::Role';
6 use MooseX::Role::Parameterized::Parameters;
8 has parameter_metaclass => (
10 isa => 'Moose::Meta::Class',
13 Moose::Meta::Class->create_anon_class(
14 superclasses => ['MooseX::Role::Parameterized::Parameters'],
19 has role_generator => (
22 predicate => 'has_role_generator',
27 $self->parameter_metaclass->add_attribute(@_);
30 sub construct_parameters {
32 $self->parameter_metaclass->construct_instance(@_);
39 confess "A role generator is required to generate roles"
40 unless $self->has_role_generator;
42 my $metaclass = Moose::Meta::Class->create_anon_class(
43 superclasses => ['Moose::Meta::Role'],
45 my $role = $metaclass->construct_instance;
47 my $parameters = $self->construct_parameters(%args);
49 local $MooseX::Role::Parameterized::CURRENT_METACLASS = $role;
50 $self->role_generator->($parameters,
51 operating_on => $role,
57 __PACKAGE__->meta->make_immutable;