use Moose::Role ();
extends 'Moose::Exporter';
-use MooseX::Role::Parameterized::Meta::Role;
+use MooseX::Role::Parameterized::Meta::Role::Parameterizable;
our $CURRENT_METACLASS;
__PACKAGE__->setup_import_methods(
- with_caller => ['parameter', 'role', 'has'],
+ with_caller => ['parameter', 'role', 'method'],
+ as_is => ['has'],
);
sub parameter {
$names = [$names] if !ref($names);
for my $name (@$names) {
- $caller->meta->add_parameter($name, @_);
+ Class::MOP::Class->initialize($caller)->add_parameter($name, @_);
}
}
sub role {
my $caller = shift;
my $role_generator = shift;
- $caller->meta->role_generator($role_generator);
+ Class::MOP::Class->initialize($caller)->role_generator($role_generator);
}
sub init_meta {
my $self = shift;
return Moose::Role->init_meta(@_,
- metaclass => 'MooseX::Role::Parameterized::Meta::Role',
+ metaclass => 'MooseX::Role::Parameterized::Meta::Role::Parameterizable',
);
}
confess "has must be called within the role { ... } block."
unless $CURRENT_METACLASS;
- my $caller = shift;
- my $names = shift;
-
+ my $names = shift;
$names = [$names] if !ref($names);
for my $name (@$names) {
}
}
+sub method {
+ confess "method must be called within the role { ... } block."
+ unless $CURRENT_METACLASS;
+
+ my $caller = shift;
+ my $name = shift;
+ my $body = shift;
+
+ my $method = $CURRENT_METACLASS->method_metaclass->wrap(
+ package_name => $caller,
+ name => $name,
+ body => $body,
+ );
+
+ $CURRENT_METACLASS->add_method($name => $method);
+}
+
1;