removed some debug stuff
[gitmo/Moose.git] / lib / Moose / Meta / TypeConstraint / Union.pm
index 293cdb2..c9d3f42 100644 (file)
@@ -7,7 +7,8 @@ use metaclass;
 
 use Moose::Meta::TypeCoercion::Union;
 
-our $VERSION   = '0.50';
+our $VERSION   = '0.59';
+$VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
 use base 'Moose::Meta::TypeConstraint';
@@ -20,7 +21,8 @@ __PACKAGE__->meta->add_attribute('type_constraints' => (
 sub new { 
     my ($class, %options) = @_;
     my $self = $class->SUPER::new(
-        name     => (join ' | ' => map { $_->name } @{$options{type_constraints}}),
+        name     => (join '|' => sort {$a cmp $b}
+                     map { $_->name } @{$options{type_constraints}}),
         parent   => undef,
         message  => undef,
         hand_optimized_type_constraint => undef,
@@ -98,6 +100,28 @@ sub is_subtype_of {
     return 0;
 }
 
+sub create_childtype {
+    my ($self, %opts) = @_;
+    my $class = ref $self;
+    my $constraint = Moose::Meta::TypeConstraint->new(%opts, parent => $self);
+    
+    # if we have a type constraint union, and no
+    # type check, this means we are just aliasing
+    # the union constraint, which means we need to
+    # handle this differently.
+    # - SL
+    if (
+            not(defined $opts{constraint})
+            && $self->has_coercion
+    ) {
+        $constraint->coercion(Moose::Meta::TypeCoercion::Union->new(
+            type_constraint => $self,
+        ));
+    }
+    
+    return $constraint;
+}
+
 1;
 
 __END__
@@ -111,7 +135,7 @@ Moose::Meta::TypeConstraint::Union - A union of Moose type constraints
 =head1 DESCRIPTION
 
 This metaclass represents a union of Moose type constraints. More 
-details to be explained later (possibly in a Cookbook::Recipe).
+details to be explained later (possibly in a Cookbook recipe).
 
 This actually used to be part of Moose::Meta::TypeConstraint, but it 
 is now better off in it's own file. 
@@ -180,6 +204,8 @@ anyway. They are here for completeness.
 
 =item B<has_hand_optimized_type_constraint>
 
+=item B<create_childtype>
+
 =back
 
 =head1 BUGS