BUILDARGS exception
Matt S Trout [Thu, 26 Apr 2012 18:49:52 +0000 (18:49 +0000)]
Changes
lib/Method/Generate/Constructor.pm
t/buildargs-error.t

diff --git a/Changes b/Changes
index d48047c..754a20d 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,4 @@
+  - better error message for broken BUILDARGS
   - provide 'no Moo::sification' to forcibly disable metaclass inflation
   - switch to Devel::GlobalDestruction to correctly disarm the
     Moo::sification trigger under threads
index 707341d..86c5afb 100644 (file)
@@ -90,7 +90,9 @@ sub _cap_call {
 
 sub _generate_args_via_buildargs {
   my ($self) = @_;
-  q{    my $args = $class->BUILDARGS(@_);}."\n";
+  q{    my $args = $class->BUILDARGS(@_);}."\n"
+  .q{    die "BUILDARGS did not return a hashref" unless ref($args) eq 'HASH';}
+  ."\n";
 }
 
 # inlined from Moo::Object - update that first.
index 85afbe8..97376c4 100644 (file)
@@ -1,5 +1,6 @@
 use strictures 1;
 use Test::More;
+use Test::Fatal;
 
 {
     package Foo;
@@ -15,7 +16,11 @@ use Test::More;
     }
 }
 
-my $f = Foo->new({ bar => 1, baz => 1 });
+like(
+  exception { Foo->new({ bar => 1, baz => 1 }) },
+  qr/BUILDARGS did not return a hashref/,
+  'Sensible error message'
+);
 
 done_testing;