X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FStrictConstructor.pm;h=75d6eb30fb70d1bc591acf18de47759db590259c;hb=7815dbf469598fee15cf3e076b0de4e4eca15311;hp=3be669ac571eb61f6eab51c1fecf038a93cbab4e;hpb=32726d885ed56a2628ec0eccf18b2e898d1ca8ca;p=gitmo%2FMooseX-StrictConstructor.git diff --git a/lib/MooseX/StrictConstructor.pm b/lib/MooseX/StrictConstructor.pm index 3be669a..75d6eb3 100644 --- a/lib/MooseX/StrictConstructor.pm +++ b/lib/MooseX/StrictConstructor.pm @@ -3,69 +3,88 @@ package MooseX::StrictConstructor; use strict; use warnings; -our $VERSION = '0.01'; +use Moose 0.94 (); +use Moose::Exporter; +use Moose::Util::MetaRole; +use MooseX::StrictConstructor::Role::Object; -use Moose; -use MooseX::Object::StrictConstructor; - - -sub import { - my $caller = caller(); - - return if $caller eq 'main'; - - Moose::init_meta( $caller, 'MooseX::Object::StrictConstructor', 'Moose::Meta::Class' ); - - Moose->import( { into => $caller } ); - - return; + my %class_meta; + + if ( $Moose::VERSION < 1.9900 ) { + require MooseX::StrictConstructor::Role::Meta::Method::Constructor; + %class_meta = ( + constructor => [ + 'MooseX::StrictConstructor::Role::Meta::Method::Constructor'] + ); + } + else { + require MooseX::StrictConstructor::Role::Meta::Class; + %class_meta + = ( class => ['MooseX::StrictConstructor::Role::Meta::Class'] ); + } + + Moose::Exporter->setup_import_methods( + class_metaroles => \%class_meta, + base_class_roles => ['MooseX::StrictConstructor::Role::Object'], + ); } - - 1; +# ABSTRACT: Make your object constructors blow up on unknown attributes + __END__ =pod -=head1 NAME - -MooseX::StrictConstructor - The fantastic new MooseX::StrictConstructor! - =head1 SYNOPSIS -XXX - change this! + package My::Class; + use Moose; use MooseX::StrictConstructor; - my $foo = MooseX::StrictConstructor->new(); + has 'size' => ...; - ... + # then later ... -=head1 DESCRIPTION + # this blows up because color is not a known attribute + My::Class->new( size => 5, color => 'blue' ); -=head1 METHODS +=head1 DESCRIPTION -This class provides the following methods +Simply loading this module makes your constructors "strict". If your +constructor is called with an attribute init argument that your class +does not declare, then it calls "Carp::confess()". This is a great way +to catch small typos. -=head1 AUTHOR +=head2 Subverting Strictness -Dave Rolsky, C<< >> +You may find yourself wanting to have your constructor accept a +parameter which does not correspond to an attribute. -=head1 BUGS +In that case, you'll probably also be writing a C or +C method to deal with that parameter. In a C +method, you can simply make sure that this parameter is not included +in the hash reference you return. Otherwise, in a C method, +you can delete it from the hash reference of parameters. -Please report any bugs or feature requests to C, -or through the web interface at L. I will be -notified, and then you'll automatically be notified of progress on -your bug as I make changes. + sub BUILD { + my $self = shift; + my $params = shift; -=head1 COPYRIGHT & LICENSE + if ( delete $params->{do_something} ) { + ... + } + } -Copyright 2007 Dave Rolsky, All Rights Reserved. +=head1 BUGS -This program is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. +Please report any bugs or feature requests to +C, or through the web +interface at L. I will be notified, and then +you'll automatically be notified of progress on your bug as I make +changes. =cut