| MooseX-StrictConstructor documentation | Contained in the MooseX-StrictConstructor distribution. |
MooseX::StrictConstructor::Trait::Method::Constructor - A role to make immutable constructors strict
version 0.16
This role simply wraps _generate_BUILDALL() (from
Moose::Meta::Method::Constructor) so that immutable classes have a
strict constructor.
Dave Rolsky <autarch@urth.org>
This software is Copyright (c) 2011 by Dave Rolsky.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
| MooseX-StrictConstructor documentation | Contained in the MooseX-StrictConstructor distribution. |
package MooseX::StrictConstructor::Trait::Method::Constructor; BEGIN { $MooseX::StrictConstructor::Trait::Method::Constructor::VERSION = '0.16'; } use Moose::Role; use namespace::autoclean; use B (); 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() } ); $source .= <<"EOF"; my \%attrs = (@attrs); my \@bad = sort grep { ! \$attrs{\$_} } keys \%{ \$params }; if (\@bad) { Moose->throw_error("Found unknown attribute(s) passed to the constructor: \@bad"); } EOF return $source; }; 1; # ABSTRACT: A role to make immutable constructors strict
__END__