Deprecate hash-triggers
Shawn M Moore [Wed, 23 Jul 2008 06:11:53 +0000 (06:11 +0000)]
Changes
lib/Mouse.pm
lib/Mouse/Meta/Attribute.pm
t/016-trigger.t

diff --git a/Changes b/Changes
index 70af360..7207378 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,8 +1,13 @@
 Revision history for Mouse
 
-0.06
+0.06 Thu Jul 23 02:10:07 2008
+    * Deprecating before/after/around triggers! Switch back to coderef +
+      whatever you used to do. Moose is have it implemented it as an extension
+      trait.
+
     * Mouse
       - updated trigger doc (thanks perigrin)
+        - which will not see CPAN :( sorry perigrin!
 
     * Mouse::Meta::Class
       - add a make_immutable method which does nothing(!), for even more
index 92ee9af..089ea86 100644 (file)
@@ -340,20 +340,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
-
-Historically, triggers have been like "after" method modifiers. They allowed
-you to run code after your attribute had been set. Passing a coderef to the
-C<trigger> option still works this way.
-
-By passing a hashref to C<trigger>, you also get "before" and "around"
-triggers. The "before" and "after" triggers don't affect the act of setting
-the attribute value, and their return values are ignored. The "around" trigger
-can be used to change the value that is being set on the attribute, or prevent
-the attribute from being updated altogether. The "around" trigger's arguments
-are a code reference to set the attribute's value (this coderef expects the
-instance and the new value), the instance, the new value, and the attribute
-metaclass.
+=item trigger => CodeRef
+
+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.
+
+Mouse 0.05 supported more complex triggers, but this behavior is now deprecated.
 
 =item builder => Str
 
index 3deea32..230efb5 100644 (file)
@@ -277,8 +277,11 @@ sub validate_args {
                 after => $args->{trigger},
             };
         }
+        elsif (ref($args->{trigger}) eq 'HASH') {
+            Carp::carp "HASH-based form of trigger is deprecated. Please switch back to using the coderef form of trigger.";
+        }
 
-        confess "Trigger must be a CODE or HASH ref on attribute ($name)"
+        confess "Trigger must be a CODE ref on attribute ($name)"
             if ref($args->{trigger}) ne 'HASH';
     }
 
index dc331c7..312e9f2 100644 (file)
@@ -31,7 +31,7 @@ do {
             is => 'ro',
             trigger => [],
         );
-    } qr/Trigger must be a CODE or HASH ref on attribute \(error\)/;
+    } qr/Trigger must be a CODE ref on attribute \(error\)/;
 };
 
 can_ok(Class => 'attr');