When inlining with Moose 2.0+, close over hash of allowed attrs rather than regenerat...
[gitmo/MooseX-StrictConstructor.git] / lib / MooseX / StrictConstructor / Trait / Class.pm
index 99803d2..b96e5fd 100644 (file)
@@ -7,24 +7,26 @@ use namespace::autoclean;
 use B ();
 
 around new_object => sub {
-    my $orig = shift;
-    my $self = shift;
-    my $params = @_ == 1 ? $_[0] : {@_};
+    my $orig     = shift;
+    my $self     = shift;
+    my $params   = @_ == 1 ? $_[0] : {@_};
     my $instance = $self->$orig(@_);
 
     my %attrs = (
         __INSTANCE__ => 1,
-        (map { $_ => 1 }
-             grep { defined }
-                  map { $_->init_arg }
-                      $self->get_all_attributes)
+        (
+            map { $_ => 1 }
+            grep {defined}
+            map  { $_->init_arg() } $self->get_all_attributes()
+        )
     );
 
     my @bad = sort grep { !$attrs{$_} } keys %$params;
 
     if (@bad) {
         $self->throw_error(
-            "Found unknown attribute(s) init_arg passed to the constructor: @bad");
+            "Found unknown attribute(s) init_arg passed to the constructor: @bad"
+        );
     }
 
     return $instance;
@@ -45,8 +47,7 @@ around '_inline_BUILDALL' => sub {
 
     return (
         @source,
-        'my %attrs = (' . ( join ' ', @attrs ) . ');',
-        'my @bad = sort grep { !$attrs{$_} } keys %{ $params };',
+        'my @bad = sort grep { !$allowed_attrs{$_} } keys %{ $params };',
         'if (@bad) {',
             'Moose->throw_error("Found unknown attribute(s) passed to the constructor: @bad");',
         '}',