X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FTypeCoercion.pm;h=e6c71b01e273d5284b7041693c6b107504de2848;hb=462bdc732ebe32abf5b9f3cd40033540a5f1388f;hp=9e5222fd398967c5e77644bfd86e6a2eb06fb2bd;hpb=56d7c7453888ed2c684bcdb1d905841d8d03aeb1;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/TypeCoercion.pm b/lib/Moose/Meta/TypeCoercion.pm index 9e5222f..e6c71b0 100644 --- a/lib/Moose/Meta/TypeCoercion.pm +++ b/lib/Moose/Meta/TypeCoercion.pm @@ -8,10 +8,6 @@ use metaclass; use Moose::Meta::Attribute; use Moose::Util::TypeConstraints (); -our $VERSION = '0.73'; -$VERSION = eval $VERSION; -our $AUTHORITY = 'cpan:STEVAN'; - __PACKAGE__->meta->add_attribute('type_coercion_map' => ( reader => 'type_coercion_map', default => sub { [] } @@ -29,9 +25,9 @@ __PACKAGE__->meta->add_attribute('compiled_type_coercion' => ( accessor => '_compiled_type_coercion' )); -sub new { +sub new { my $class = shift; - my $self = $class->meta->new_object(@_); + my $self = Class::MOP::class_of($class)->new_object(@_); $self->compile_type_coercion; return $self; } @@ -49,22 +45,22 @@ sub compile_type_coercion { Moose->throw_error("Could not find the type constraint ($constraint_name) to coerce from"); } - push @coercions => [ - $type_constraint->_compiled_type_constraint, - $action + push @coercions => [ + $type_constraint->_compiled_type_constraint, + $action ]; } - $self->_compiled_type_coercion(sub { + $self->_compiled_type_coercion(sub { my $thing = shift; foreach my $coercion (@coercions) { my ($constraint, $converter) = @$coercion; if ($constraint->($thing)) { - local $_ = $thing; + local $_ = $thing; return $converter->($thing); } } return $thing; - }); + }); } sub has_coercion_for_type { @@ -75,12 +71,12 @@ sub has_coercion_for_type { sub add_type_coercions { my ($self, @new_coercion_map) = @_; - - my $coercion_map = $self->type_coercion_map; + + my $coercion_map = $self->type_coercion_map; my %has_coercion = @$coercion_map; - + while (@new_coercion_map) { - my ($constraint_name, $action) = splice(@new_coercion_map, 0, 2); + my ($constraint_name, $action) = splice(@new_coercion_map, 0, 2); if ( exists $has_coercion{$constraint_name} ) { require Moose; @@ -89,7 +85,7 @@ sub add_type_coercions { push @{$coercion_map} => ($constraint_name, $action); } - + # and re-compile ... $self->compile_type_coercion; } @@ -99,14 +95,12 @@ sub coerce { $_[0]->_compiled_type_coercion->($_[1]) } 1; +# ABSTRACT: The Moose Type Coercion metaclass + __END__ =pod -=head1 NAME - -Moose::Meta::TypeCoercion - The Moose Type Coercion metaclass - =head1 DESCRIPTION A type coercion object is basically a mapping of one or more type @@ -174,21 +168,6 @@ This will return a L instance for this class. =head1 BUGS -All complex software has bugs lurking in it, and this module is no -exception. If you find a bug please either email me, or add the bug -to cpan-RT. - -=head1 AUTHOR - -Stevan Little Estevan@iinteractive.comE - -=head1 COPYRIGHT AND LICENSE - -Copyright 2006-2009 by Infinity Interactive, Inc. - -L - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. +See L for details on reporting bugs. =cut