X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FStrictConstructor%2FTrait%2FClass.pm;h=707c75fc187a89c4d882a5d87f28e51e3fd9cac4;hb=eb63f59e57cf8becf26666fa380fb73593e8f4a5;hp=f3d2850fd57b2a3fa3306a9ffc17d33a6e961c18;hpb=93a34553840cea4a0dd767248613f775db2d834f;p=gitmo%2FMooseX-StrictConstructor.git diff --git a/lib/MooseX/StrictConstructor/Trait/Class.pm b/lib/MooseX/StrictConstructor/Trait/Class.pm index f3d2850..707c75f 100644 --- a/lib/MooseX/StrictConstructor/Trait/Class.pm +++ b/lib/MooseX/StrictConstructor/Trait/Class.pm @@ -1,12 +1,36 @@ package MooseX::StrictConstructor::Trait::Class; -use strict; -use warnings; +use Moose::Role; + +use namespace::autoclean; use B (); -use Carp (); -use Moose::Role; +around new_object => sub { + 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() + ) + ); + + my @bad = sort grep { !$attrs{$_} } keys %$params; + + if (@bad) { + $self->throw_error( + "Found unknown attribute(s) init_arg passed to the constructor: @bad" + ); + } + + return $instance; +}; around '_inline_BUILDALL' => sub { my $orig = shift; @@ -26,12 +50,10 @@ around '_inline_BUILDALL' => sub { 'my %attrs = (' . ( join ' ', @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");', '}', ); -}; - -no Moose::Role; +} if $Moose::VERSION >= 1.9900; 1;