bump version to 0.75_01
[gitmo/Moose.git] / lib / Moose / Meta / TypeCoercion.pm
index 426e2b6..8b73ca1 100644 (file)
@@ -5,12 +5,11 @@ use strict;
 use warnings;
 use metaclass;
 
-use Carp 'confess';
-
 use Moose::Meta::Attribute;
 use Moose::Util::TypeConstraints ();
 
-our $VERSION   = '0.50';
+our $VERSION   = '0.75_01';
+$VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
 __PACKAGE__->meta->add_attribute('type_coercion_map' => (
@@ -32,7 +31,7 @@ __PACKAGE__->meta->add_attribute('compiled_type_coercion' => (
 
 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;
 }
@@ -44,8 +43,12 @@ sub compile_type_coercion {
     while (@coercion_map) {
         my ($constraint_name, $action) = splice(@coercion_map, 0, 2);
         my $type_constraint = ref $constraint_name ? $constraint_name : Moose::Util::TypeConstraints::find_or_parse_type_constraint($constraint_name);
-        (defined $type_constraint)
-            || confess "Could not find the type constraint ($constraint_name) to coerce from";
+
+        unless ( defined $type_constraint ) {
+            require Moose;
+            Moose->throw_error("Could not find the type constraint ($constraint_name) to coerce from");
+        }
+
         push @coercions => [ 
             $type_constraint->_compiled_type_constraint, 
             $action 
@@ -78,10 +81,12 @@ sub add_type_coercions {
     
     while (@new_coercion_map) {
         my ($constraint_name, $action) = splice(@new_coercion_map, 0, 2);        
-        
-        confess "A coercion action already exists for '$constraint_name'"
-            if exists $has_coercion{$constraint_name};
-        
+
+        if ( exists $has_coercion{$constraint_name} ) {
+            require Moose;
+            Moose->throw_error("A coercion action already exists for '$constraint_name'")
+        }
+
         push @{$coercion_map} => ($constraint_name, $action);
     }
     
@@ -104,34 +109,66 @@ Moose::Meta::TypeCoercion - The Moose Type Coercion metaclass
 
 =head1 DESCRIPTION
 
-For the most part, the only time you will ever encounter an 
-instance of this class is if you are doing some serious deep 
-introspection. This API should not be considered final, but 
-it is B<highly unlikely> that this will matter to a regular 
-Moose user.
+A type coercion object is basically a mapping of one or more type
+constraints and the associated coercions subroutines.
 
-If you wish to use features at this depth, please come to the 
-#moose IRC channel on irc.perl.org and we can talk :)
+It's unlikely that you will need to instantiate an object of this
+class directly, as it's part of the deep internals of Moose.
 
 =head1 METHODS
 
 =over 4
 
-=item B<meta>
+=item B<< Moose::Meta::TypeCoercion->new(%options) >>
+
+Creates a new type coercion object, based on the options provided.
+
+=over 8
+
+=item * type_constraint
+
+This is the L<Moose::Meta::TypeConstraint> object for the type that is
+being coerced I<to>.
+
+=back
+
+=item B<< $coercion->type_coercion_map >>
+
+This returns the map of type constraints to coercions as an array
+reference. The values of the array alternate between type names and
+subroutine references which implement the coercion.
+
+The value is an array reference because coercions are tried in the
+order they are added.
+
+=item B<< $coercion->type_constraint >>
+
+This returns the L<Moose::Meta::TypeConstraint> that was passed to the
+constructor.
+
+=item B<< $coercion->has_coercion_for_type($type_name) >>
+
+Returns true if the coercion can coerce the named type.
+
+=item B<< $coercion->add_type_coercions( $type_name => $sub, ... ) >>
 
-=item B<new>
+This method takes a list of type names and subroutine references. If
+the coercion already has a mapping for a given type, it throws an
+exception.
 
-=item B<compile_type_coercion>
+Coercions are actually
 
-=item B<coerce>
+=item B<< $coercion->coerce($value) >>
 
-=item B<type_coercion_map>
+This method takes a value and applies the first valid coercion it
+finds.
 
-=item B<type_constraint>
+This means that if the value could belong to more than type in the
+coercion object, the first coercion added is used.
 
-=item B<has_coercion_for_type>
+=item B<< Moose::Meta::TypeCoercion->meta >>
 
-=item B<add_type_coercions>
+This will return a L<Class::MOP::Class> instance for this class.
 
 =back
 
@@ -147,7 +184,7 @@ Stevan Little E<lt>stevan@iinteractive.comE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright 2006-2008 by Infinity Interactive, Inc.
+Copyright 2006-2009 by Infinity Interactive, Inc.
 
 L<http://www.iinteractive.com>