Remove blessed from Mouse::Object because it's not used
[gitmo/Mouse.git] / lib / Mouse.pm
index 862fe44..71640fc 100644 (file)
@@ -3,13 +3,12 @@ package Mouse;
 use strict;
 use warnings;
 
-our $VERSION = '0.05';
+our $VERSION = '0.07';
 use 5.006;
 
 use Sub::Exporter;
 use Carp 'confess';
 use Scalar::Util 'blessed';
-use Class::Method::Modifiers ();
 
 use Mouse::Meta::Attribute;
 use Mouse::Meta::Class;
@@ -61,15 +60,42 @@ do {
         },
 
         before => sub {
-            return \&Class::Method::Modifiers::before;
+            my $caller = $CALLER;
+
+            return sub {
+                my $code = pop;
+                my $class = $caller->meta;
+
+                for (@_) {
+                    $class->add_before_method_modifier($_ => $code);
+                }
+            };
         },
 
         after => sub {
-            return \&Class::Method::Modifiers::after;
+            my $caller = $CALLER;
+
+            return sub {
+                my $code = pop;
+                my $class = $caller->meta;
+
+                for (@_) {
+                    $class->add_after_method_modifier($_ => $code);
+                }
+            };
         },
 
         around => sub {
-            return \&Class::Method::Modifiers::around;
+            my $caller = $CALLER;
+
+            return sub {
+                my $code = pop;
+                my $class = $caller->meta;
+
+                for (@_) {
+                    $class->add_around_method_modifier($_ => $code);
+                }
+            };
         },
 
         with => sub {
@@ -214,7 +240,7 @@ expert-level features.
 
 Compatibility with Moose has been the utmost concern. Fewer than 1% of the
 tests fail when run against Moose instead of Mouse. Mouse code coverage is also
-over 99%. Even the error messages are taken from Moose. The Mouse code just
+over 97%. Even the error messages are taken from Moose. The Mouse code just
 runs the test suite 3x-4x faster.
 
 The idea is that, if you need the extra power, you should be able to run
@@ -228,8 +254,9 @@ Mouse also has the blessings of Moose's author, stevan.
 
 =head3 Roles
 
-Fixing this one slightly less soon. stevan has suggested an implementation
-strategy. Mouse currently mostly ignores methods.
+We're working on fixing this one! stevan has suggested an implementation
+strategy. Mouse currently ignores methods, so that needs to be fixed next.
+Roles that consist entirely of attributes may be usable in this very version.
 
 =head3 Complex types
 
@@ -339,20 +366,11 @@ L</handles>, such as regular expression and coderef, are not yet supported.
 
 Lets you automatically weaken any reference stored in the attribute.
 
-=item trigger => CodeRef | HashRef
+=item trigger => CodeRef
 
-Triggers are like method modifiers for setting attribute values. You can have
-a "before" and an "after" trigger, each of which receive as arguments the instance, the new value, and the attribute metaclass. Historically, triggers have
-only been "after" modifiers, so if you use a coderef for the C<trigger> option,
-it will maintain that compatibility. Like method modifiers, you can't really
-affect the act of setting the attribute value, and the return values of the 
-modifiers are ignored.
+Any time the attribute's value is set (either through the accessor or the constructor), the trigger is called on it. The trigger receives as arguments the instance, the new value, and the attribute instance.
 
-There's also an "around" trigger which you can use to change the value that
-is being set on the attribute, or even prevent the attribute from being
-updated. The around trigger receives as arguments a code reference to invoke
-to set the attribute's value (which expects as arguments the instance and
-the new value), the instance, the new value, and the attribute metaclass.
+Mouse 0.05 supported more complex triggers, but this behavior is now deprecated.
 
 =item builder => Str