use Moose 0.94 ();
use Moose::Exporter;
use Moose::Util::MetaRole;
-use MooseX::StrictConstructor::Role::Object;
{
my %class_meta = ( class => ['MooseX::StrictConstructor::Trait::Class'] );
}
Moose::Exporter->setup_import_methods(
- class_metaroles => \%class_meta,
- base_class_roles => ['MooseX::StrictConstructor::Role::Object'],
+ class_metaroles => \%class_meta,
);
}
+++ /dev/null
-package MooseX::StrictConstructor::Role::Object;
-
-use Moose::Role;
-
-use namespace::autoclean;
-
-after 'BUILDALL' => sub {
- my $self = shift;
- my $params = shift;
-
- my %attrs = (
- __INSTANCE__ => 1,
- map { $_ => 1 }
- grep {defined}
- map { $_->init_arg() } $self->meta()->get_all_attributes()
- );
-
- my @bad = sort grep { !$attrs{$_} } keys %{$params};
-
- if (@bad) {
- Moose->throw_error(
- "Found unknown attribute(s) init_arg passed to the constructor: @bad");
- }
-
- return;
-};
-
-1;
-
-# ABSTRACT: A role which implements a strict constructor for Moose::Object
-
-__END__
-
-=pod
-
-=head1 SYNOPSIS
-
- Moose::Util::MetaRole::apply_base_class_roles(
- for_class => $caller,
- roles =>
- ['MooseX::StrictConstructor::Role::Object'],
- );
-
-=head1 DESCRIPTION
-
-When you use C<MooseX::StrictConstructor>, your objects will have this
-role applied to them. It provides a method modifier for C<BUILDALL()>
-from C<Moose::Object> that implements strict argument checking for
-your class.
-
-=cut
use B ();
+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;
my $self = shift;
);
} if $Moose::VERSION >= 1.9900;
-# 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