use B ();
-around '_generate_BUILDALL' => sub {
+around _generate_BUILDALL => sub {
my $orig = shift;
my $self = shift;
my $source = $self->$orig();
$source .= ";\n" if $source;
- my @attrs = (
- '__INSTANCE__ => 1,',
- map { B::perlstring($_) . ' => 1,' }
- grep {defined}
- map { $_->init_arg() } @{ $self->_attributes() }
- );
+ my @attrs = '__INSTANCE__ => 1,';
+ push @attrs, map { B::perlstring($_) . ' => 1,' }
+ grep { defined }
+ map { $_->init_arg() } @{ $self->_attributes() };
+
$source .= <<"EOF";
my \%attrs = (@attrs);
EOF
return $source;
-};
+} if $Moose::VERSION < 1.9900;
+
+around _eval_environment => sub {
+ my $orig = shift;
+ my $self = shift;
+
+ my $env = $self->$orig();
+
+ my %attrs = map { $_ => 1 }
+ grep { defined }
+ map { $_->init_arg() }
+ $self->associated_metaclass()->get_all_attributes();
+
+ $attrs{__INSTANCE__} = 1;
+
+ $env->{'%allowed_attrs'} = \%attrs;
+
+ return $env;
+} if $Moose::VERSION >= 1.9900;
1;