potential fixes for role problems.. doesnt solve everything though; will have to...
[gitmo/MooseX-AlwaysCoerce.git] / lib / MooseX / AlwaysCoerce.pm
index 3fbfd59..96b6213 100644 (file)
@@ -18,11 +18,11 @@ MooseX::AlwaysCoerce - Automatically enable coercions for Moose attributes
 
 =head1 VERSION
 
-Version 0.05
+Version 0.06
 
 =cut
 
-our $VERSION = '0.05';
+our $VERSION = '0.06';
 
 =head1 SYNOPSIS
 
@@ -68,6 +68,7 @@ Use C<< coerce => 0 >> to disable a coercion explicitly.
     use namespace::autoclean;
     use Moose::Role;
     use Moose::Util::TypeConstraints;
+    use MooseX::ClassAttribute;
 
     around add_class_attribute => sub {
         my $next = shift;
@@ -81,22 +82,31 @@ Use C<< coerce => 0 >> to disable a coercion explicitly.
     };
 }
 
+my (undef, undef, $init_meta) = Moose::Exporter->build_import_methods(
+
+    install => [ qw(import unimport) ],
+
+    class_metaroles => {
+        attribute   => ['MooseX::AlwaysCoerce::Role::Meta::Attribute'],
+        class       => ['MooseX::AlwaysCoerce::Role::Meta::Class'],
+    },
+
+    also            => ['MooseX::ClassAttribute'],
+);
+
 sub init_meta {
-    shift;
-    my %options = @_;
+    my ($class, %options) = @_;
     my $for_class = $options{for_class};
 
-    MooseX::ClassAttribute->import({ into => $for_class });
-
-    Moose::Util::MetaRole::apply_metaclass_roles(
-        for_class => $for_class,
-        attribute_metaclass_roles =>
-            ['MooseX::AlwaysCoerce::Role::Meta::Attribute'],
-        metaclass_roles =>
-            ['MooseX::AlwaysCoerce::Role::Meta::Class'],
-    );
+    # Bring this in only if we are being applied to a
+    # metaclass, but not a metarole.
+    if (Class::MOP::class_of($for_class)->isa('Class::MOP::Class'))
+    {
+        MooseX::ClassAttribute->import({ into => $for_class });
+    }
 
-    return $for_class->meta;
+    # call generated method to do the rest of the work.
+    goto $init_meta;
 }
 
 =head1 AUTHOR
@@ -106,6 +116,7 @@ Rafael Kitover, C<< <rkitover at cpan.org> >>
 =head1 CONTRIBUTORS
 
 Schwern: Michael G. Schwern <mschwern@cpan.org>
+Ether: Karen Etheridge <ether@cpan.org>
 
 =head1 BUGS
 
@@ -145,7 +156,7 @@ Dave Rolsky, for telling me how to do it the L<Moose> way.
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright (c) 2009 Rafael Kitover
+Copyright (c) 2009-2010 Rafael Kitover
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl itself.