aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-03-04 13:31:34 -0600
committerJesse Luehrs <doy@tozt.net>2011-03-04 13:31:34 -0600
commit9be81e194a68c4d49215701c65da3c5a264c6384 (patch)
treecbf4c3b967e1f948fc4e997362c5a7d7dea03856
parent7e8cc0731f15f8c4b12f4a8f9d2da23d077c9b9c (diff)
downloadreaction-9be81e194a68c4d49215701c65da3c5a264c6384.tar.gz
reaction-9be81e194a68c4d49215701c65da3c5a264c6384.zip
fixes for the applied_attribute stuff in moose 2
-rw-r--r--lib/Reaction/Class.pm6
-rw-r--r--lib/Reaction/Meta/Role.pm14
-rw-r--r--lib/Reaction/Role.pm9
-rw-r--r--lib/Reaction/Role/Meta/Role.pm12
-rw-r--r--lib/Reaction/Role/Parameterized.pm68
-rw-r--r--lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm2
-rw-r--r--lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm2
7 files changed, 108 insertions, 5 deletions
diff --git a/lib/Reaction/Class.pm b/lib/Reaction/Class.pm
index f2f8c3a..7077522 100644
--- a/lib/Reaction/Class.pm
+++ b/lib/Reaction/Class.pm
@@ -221,10 +221,10 @@ sub import {
my $self = shift;
my $pkg = caller;
my @args = @_;
- &strict::import;
- &warnings::import;
+ strict->import;
+ warnings->import;
$self->do_import($pkg, \@args);
- goto &{$self->next_import};
+ goto &{$self->next_import} if $self->next_import;
}
sub next_import {
diff --git a/lib/Reaction/Meta/Role.pm b/lib/Reaction/Meta/Role.pm
new file mode 100644
index 0000000..b9bbe61
--- /dev/null
+++ b/lib/Reaction/Meta/Role.pm
@@ -0,0 +1,14 @@
+package Reaction::Meta::Role;
+
+use Moose;
+use Reaction::Meta::Attribute;
+
+extends 'Moose::Meta::Role';
+
+with 'Reaction::Role::Meta::Role';
+
+no Moose;
+
+__PACKAGE__->meta->make_immutable;
+
+1;
diff --git a/lib/Reaction/Role.pm b/lib/Reaction/Role.pm
index 7da166f..c2f16f4 100644
--- a/lib/Reaction/Role.pm
+++ b/lib/Reaction/Role.pm
@@ -25,6 +25,15 @@ override add_method_to_target => sub {
my ($self, $target, $method) = @_;
$target->meta->add_method(@$method);
};
+override next_import => sub {
+ my ($self) = @_;
+ my $import = super;
+ # ugh
+ return sub {
+ push @_, '-metaclass' => 'Reaction::Meta::Role';
+ goto $import;
+ };
+};
sub do_role_sub {
my ($self, $package, $role, $which, $setup) = @_;
confess "Invalid role declaration, should be: role Role which { ... }"
diff --git a/lib/Reaction/Role/Meta/Role.pm b/lib/Reaction/Role/Meta/Role.pm
new file mode 100644
index 0000000..8708abb
--- /dev/null
+++ b/lib/Reaction/Role/Meta/Role.pm
@@ -0,0 +1,12 @@
+package Reaction::Role::Meta::Role;
+
+use Moose::Role;
+
+around initialize => sub {
+ my $super = shift;
+ my $class = shift;
+ my $pkg = shift;
+ $super->($class, $pkg, 'applied_attribute_metaclass' => 'Reaction::Meta::Attribute', @_ );
+};
+
+1;
diff --git a/lib/Reaction/Role/Parameterized.pm b/lib/Reaction/Role/Parameterized.pm
new file mode 100644
index 0000000..98074cd
--- /dev/null
+++ b/lib/Reaction/Role/Parameterized.pm
@@ -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
diff --git a/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm b/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm
index 6e7e90e..c5176eb 100644
--- a/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm
+++ b/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm
@@ -1,6 +1,6 @@
package Reaction::UI::ViewPort::Field::Role::Mutable;
-use MooseX::Role::Parameterized;
+use Reaction::Role::Parameterized;
use aliased 'Reaction::InterfaceModel::Action';
use aliased 'Reaction::Meta::InterfaceModel::Action::ParameterAttribute';
diff --git a/lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm b/lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm
index 0295b82..758caf5 100644
--- a/lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm
+++ b/lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm
@@ -1,6 +1,6 @@
package Reaction::UI::ViewPort::Field::Role::Mutable::Simple;
-use MooseX::Role::Parameterized;
+use Reaction::Role::Parameterized;
use aliased 'Reaction::UI::ViewPort::Field::Role::Mutable';