fixes for the applied_attribute stuff in moose 2
[catagits/Reaction.git] / lib / Reaction / Role / Parameterized.pm
diff --git a/lib/Reaction/Role/Parameterized.pm b/lib/Reaction/Role/Parameterized.pm
new file mode 100644 (file)
index 0000000..98074cd
--- /dev/null
@@ -0,0 +1,68 @@
+package Reaction::Role::Parameterized;
+
+use MooseX::Role::Parameterized ();
+use Reaction::ClassExporter;
+use Reaction::Class;
+use Moose::Meta::Class;
+
+use namespace::clean -except => [ qw(meta) ];
+
+override exports_for_package => sub {
+  my ($self, $package) = @_;
+  my %exports = $self->SUPER::exports_for_package($package);
+  delete $exports{class};
+  return %exports;
+};
+
+override default_base => sub { () };
+
+override exporter_for_package => sub {
+    my ($self) = @_;
+    my ($import) = Moose::Exporter->build_import_methods(
+        also        => ['MooseX::Role::Parameterized'],
+        with_caller => ['role'],
+    );
+    $import;
+};
+
+override next_import => sub { };
+
+sub role (&) {
+    my $caller = shift;
+    my ($code) = @_;
+    &MooseX::Role::Parameterized::role($caller, sub {
+        my ($p, %args) = @_;
+        $args{operating_on} = Moose::Util::MetaRole::apply_metaroles(
+            for            => $args{operating_on}->name,
+            role_metaroles => {
+                applied_attribute => ['Reaction::Role::Meta::Attribute'],
+            },
+        ) if Moose->VERSION >= 1.9900;
+        $code->($p, %args);
+    });
+}
+
+__PACKAGE__->meta->make_immutable;
+
+
+1;
+
+=head1 NAME
+
+Reaction::Role
+
+=head1 DESCRIPTION
+
+=head1 SEE ALSO
+
+L<Moose::Role>
+
+=head1 AUTHORS
+
+See L<Reaction::Class> for authors.
+
+=head1 LICENSE
+
+See L<Reaction::Class> for the license.
+
+=cut