@@ -1,5 +1,9 @@
Changes for MooseX-Role-Parameterized
+0.24 March 1, 2011
+ * Moose 2.0 will make MXRP more extensible by allowing role
+ reinitialization, so register the hook to make that happen (doy)
+
0.23 December 25, 2010
* Merry Christmas!
* Make MooseX::Role::Parameterized::Extending more instructive. Hopefully.
@@ -7,7 +11,7 @@ Changes for MooseX-Role-Parameterized
0.22 November 26, 2010
* The test suite now uses Test::Fatal instead of Test::Exception (Karen
Etheridge).
- * Fix Test::More dependency (reported by Father Chrysostomos)
+ * Fix Test::More dependency (reported by Father Chrysostomos) [rt.cpan.org #63222]
0.21 November 15, 2010
* "package" arg can now tell generate_role to use a specific package (rjbs)
@@ -38,6 +38,7 @@ t/016-trait.t
t/017-current_metaclass.t
t/018-parameter-roles.t
t/019-custom-metaclass.t
+t/020-metaclass-reinitialize.t
t/100-erroneous-keywords.t
t/101-alias-excludes.t
t/102-nested.t
@@ -27,4 +27,4 @@ resources:
homepage: http://github.com/sartak/MooseX-Role-Parameterized/tree
license: http://dev.perl.org/licenses/
repository: git://github.com/sartak/MooseX-Role-Parameterized.git
-version: 0.23
+version: 0.24
@@ -2,7 +2,7 @@ package MooseX::Role::Parameterized::Meta::Parameter;
use Moose;
extends 'Moose::Meta::Attribute';
-our $VERSION = '0.23';
+our $VERSION = '0.24';
# This doesn't actually do anything because _process_options does not consult
# the default value of "is". hrm.
@@ -2,7 +2,7 @@ package MooseX::Role::Parameterized::Meta::Role::Parameterizable;
use Moose;
extends 'Moose::Meta::Role';
-our $VERSION = '0.23';
+our $VERSION = '0.24';
use MooseX::Role::Parameterized::Meta::Role::Parameterized;
use MooseX::Role::Parameterized::Meta::Parameter;
@@ -105,7 +105,9 @@ sub generate_role {
consumer => $args{consumer},
);
- return $role;
+ # don't just return $role here, because it might have been changed when
+ # metaroles are applied
+ return $MooseX::Role::Parameterized::CURRENT_METACLASS;
}
sub _role_for_combination {
@@ -3,7 +3,29 @@ use Moose;
extends 'Moose::Meta::Role';
with 'MooseX::Role::Parameterized::Meta::Trait::Parameterized';
-our $VERSION = '0.23';
+our $VERSION = '0.24';
+
+around reinitialize => sub {
+ my $orig = shift;
+ my $class = shift;
+ my ($pkg) = @_;
+ my $meta = blessed($pkg) ? $pkg : Class::MOP::class_of($pkg);
+
+ # this bit is possibly subject to change. I've lodged complaints with the
+ # appropriate Moose developers :)
+ my $genitor = $meta->genitor;
+ my $parameters = $meta->parameters;
+
+ my $new = $class->$orig(
+ @_,
+ (defined($genitor) ? (genitor => $genitor) : ()),
+ (defined($parameters) ? (parameters => $parameters) : ()),
+ );
+
+ # in case the role metaclass was reinitialized
+ $MooseX::Role::Parameterized::CURRENT_METACLASS = $new;
+ return $new;
+};
__PACKAGE__->meta->make_immutable;
no Moose;
@@ -1,7 +1,7 @@
package MooseX::Role::Parameterized::Meta::Trait::Parameterized;
use Moose::Role;
-our $VERSION = '0.23';
+our $VERSION = '0.24';
use MooseX::Role::Parameterized::Parameters;
@@ -1,7 +1,7 @@
package MooseX::Role::Parameterized::Parameters;
use Moose;
-our $VERSION = '0.23';
+our $VERSION = '0.24';
__PACKAGE__->meta->make_immutable;
no Moose;
@@ -7,7 +7,7 @@ use Scalar::Util 'blessed';
use MooseX::Role::Parameterized::Meta::Role::Parameterizable;
-our $VERSION = '0.23';
+our $VERSION = '0.24';
our $CURRENT_METACLASS;
Moose::Exporter->setup_import_methods(
@@ -261,13 +261,21 @@ Shawn M Moore, C<sartak@gmail.com>
=head1 SEE ALSO
-L<http://sartak.blogspot.com/2009/05/parameterized-roles.html>
+L<http://sartak.org/2009/01/parametric-roles-in-perl-5.html>
+
+L<http://sartak.org/2009/05/the-design-of-parameterized-roles.html>
L<http://stevan-little.blogspot.com/2009/07/thoughts-on-parameterized-roles.html>
+L<http://perldition.org/articles/Parameterized%20Roles%20with%20MooseX::Declare.pod>
+
+L<http://www.modernperlbooks.com/mt/2011/01/the-parametric-role-of-my-mvc-plugin-system.html>
+
+L<http://jjnapiorkowski.typepad.com/modern-perl/2010/08/parameterized-roles-and-method-traits-redo.html>
+
L<http://sartak.org/talks/yapc-asia-2009/(parameterized)-roles/>
-L<http://perldition.org/articles/Parameterized%20Roles%20with%20MooseX::Declare.pod>
+L<https://github.com/SamuraiJack/JooseX-Role-Parameterized> - this extension ported to JavaScript's Joose
=head1 COPYRIGHT AND LICENSE
@@ -0,0 +1,54 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ require Moose;
+ if (Moose->VERSION < 1.9900) {
+ plan skip_all => "this test isn't relevant on Moose 1.x";
+ }
+ else {
+ plan tests => 1;
+ }
+}
+
+{
+ package Foo::Meta::Role::Attribute;
+ use Moose::Role;
+
+ has foo => (is => 'ro');
+}
+
+{
+ package Foo::Exporter;
+ use Moose::Exporter;
+ Moose::Exporter->setup_import_methods(
+ role_metaroles => {
+ applied_attribute => ['Foo::Meta::Role::Attribute'],
+ },
+ );
+}
+
+{
+ package Foo::Role;
+ use MooseX::Role::Parameterized;
+
+ role {
+ my $p = shift;
+ my %args = @_;
+ Foo::Exporter->import({into => $args{operating_on}->name});
+
+ has foo => (is => 'ro', foo => 'bar');
+ };
+}
+
+{
+ package Foo;
+ use Moose;
+ with 'Foo::Role';
+}
+
+{
+ is(Foo->meta->find_attribute_by_name('foo')->foo, 'bar',
+ "applied_attribute metaroles work");
+}