Fix a bug where coercions weren't called on lazy default/builder returns
Matt S Trout [Sat, 24 Mar 2012 19:25:43 +0000 (19:25 +0000)]
Changes
lib/Method/Generate/Accessor.pm

diff --git a/Changes b/Changes
index c8aa52f..f6e66fb 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,4 @@
+  - Fix a bug where coercions weren't called on lazy default/builder returns
   - Switch Moo::Utils to using Module::Runtime, and add the 5.8 %INC
     leakage fix into Role::Tiny's _load_module to provide partial parity
   - Update incompatibilities with Moose documentation
index 4a8ecd3..410b6a3 100644 (file)
@@ -178,8 +178,15 @@ sub generate_get_default {
 
 sub _generate_use_default {
   my ($self, $me, $name, $spec, $test) = @_;
+  my $get_value = $self->_generate_get_default($me, $name, $spec);
+  if ($spec->{coerce}) {
+    $get_value = $self->_generate_coerce(
+      $name, $me, $get_value,
+      $spec->{coerce}
+    )
+  }
   $self->_generate_simple_set(
-    $me, $name, $spec, $self->_generate_get_default($me, $name, $spec)
+    $me, $name, $spec, $get_value
   ).' unless '.$test;
 }