1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
package MooseX::StrictConstructor::Role::Object;
BEGIN {
$MooseX::StrictConstructor::Role::Object::VERSION = '0.10';
}
use strict;
use warnings;
use Moose::Role;
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) {
confess
"Found unknown attribute(s) init_arg passed to the constructor: @bad";
}
return;
};
no Moose::Role;
1;
# ABSTRACT: A role which implements a strict constructor for Moose::Object
=pod
=head1 NAME
MooseX::StrictConstructor::Role::Object - A role which implements a strict constructor for Moose::Object
=head1 VERSION
version 0.10
=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.
=head1 AUTHOR
Dave Rolsky <autarch@urth.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2010 by Dave Rolsky.
This is free software, licensed under:
The Artistic License 2.0
=cut
__END__
|