X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMooseX-StrictConstructor.git;a=blobdiff_plain;f=lib%2FMooseX%2FStrictConstructor%2FTrait%2FMethod%2FConstructor.pm;h=15ecf37dfdc9f30e135ea4e71d4613727f5db8a8;hp=e3dd07b086c80b14e5d20ff49412e286fc29914c;hb=791a5e6231a06114013593a16989e92f05409eb2;hpb=1a4f77329859d1a5058064cdb3eecdfa30e226b0 diff --git a/lib/MooseX/StrictConstructor/Trait/Method/Constructor.pm b/lib/MooseX/StrictConstructor/Trait/Method/Constructor.pm index e3dd07b..15ecf37 100644 --- a/lib/MooseX/StrictConstructor/Trait/Method/Constructor.pm +++ b/lib/MooseX/StrictConstructor/Trait/Method/Constructor.pm @@ -1,26 +1,22 @@ package MooseX::StrictConstructor::Trait::Method::Constructor; -use strict; -use warnings; +use Moose::Role; -use B (); -use Carp (); +use namespace::autoclean; -use Moose::Role; +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); @@ -28,14 +24,30 @@ my \%attrs = (@attrs); my \@bad = sort grep { ! \$attrs{\$_} } keys \%{ \$params }; if (\@bad) { - Carp::confess "Found unknown attribute(s) passed to the constructor: \@bad"; + Moose->throw_error("Found unknown attribute(s) passed to the constructor: \@bad"); } EOF return $source; -}; +} if $Moose::VERSION < 1.9900; + +around _eval_environment => sub { + my $orig = shift; + my $self = shift; -no Moose::Role; + 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; @@ -45,16 +57,6 @@ __END__ =pod -=head1 SYNOPSIS - - Moose::Util::MetaRole::apply_metaroles( - for_class => $caller, - class => { - constructor => - ['MooseX::StrictConstructor::Trait::Method::Constructor'], - }, - ); - =head1 DESCRIPTION This role simply wraps C<_generate_BUILDALL()> (from