X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FStrictConstructor%2FTrait%2FClass.pm;h=c6865c695c94c7377bc4d713ef54622912fbbb15;hb=7d51074a04f1ed362e74ff1cb5ac781a6db5df6d;hp=1bfb0f57fa090fe24c0f40e3f5f770ed1a7a0a1d;hpb=d99e6f32565008c417a6bf7a3335942df1f67e1b;p=gitmo%2FMooseX-StrictConstructor.git diff --git a/lib/MooseX/StrictConstructor/Trait/Class.pm b/lib/MooseX/StrictConstructor/Trait/Class.pm index 1bfb0f5..c6865c6 100644 --- a/lib/MooseX/StrictConstructor/Trait/Class.pm +++ b/lib/MooseX/StrictConstructor/Trait/Class.pm @@ -5,7 +5,6 @@ use Moose::Role; use namespace::autoclean; use B (); -use Carp (); around '_inline_BUILDALL' => sub { my $orig = shift; @@ -25,11 +24,24 @@ 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");', '}', ); }; +# If the base class role is applied first, and then a superclass is added, we +# lose the role. +after superclasses => sub { + my $self = shift; + + return unless @_; + + Moose::Util::MetaRole::apply_base_class_roles( + for => $self->name(), + roles => ['MooseX::StrictConstructor::Role::Object'], + ); +}; + 1; # ABSTRACT: A role to make immutable constructors strict