This class defines the following methods.
-=head
+=head add_type_coercions
-=cut
+method modification to throw exception should we try to add a coercion on a
+dependent type that's had it's constraining value filled
-sub coerce {
- my $self = shift @_;
- my $coderef = $self->_compiled_type_coercion;
- return $coderef->(@_);
-}
+=cut
around 'add_type_coercions' => sub {
my ($add_type_coercions, $self, @args) = @_;
}
};
+
+## These two are here until I can merge change upstream to Moose
+sub coerce {
+ my $self = shift @_;
+ my $coderef = $self->_compiled_type_coercion;
+ return $coderef->(@_);
+}
+
sub compile_type_coercion {
my $self = shift;
my @coercion_map = @{$self->type_coercion_map};
});
}
-
-
-
=head1 SEE ALSO
The following modules or resources may be of interest.
=cut
+## Right now I add in the dependent type coercion until I can merge some Moose
+## changes upstream
+
around 'new' => sub {
my ($new, $class, @args) = @_;
my $self = $class->$new(@args);
}
};
+=head2 is_subtype_of
+
+Method modifier to make sure we match on subtype for both the dependent type
+as well as the type being made dependent
+
+=cut
+
around 'is_subtype_of' => sub {
my ( $is_subtype_of, $self, $type_or_name ) = @_;
};
-sub is_a_type_of {
- my ($self, @args) = @_;
- return ($self->equals(@args) ||
- $self->is_subtype_of(@args));
-}
+=head2 check
+
+As with 'is_subtype_of', we need to dual dispatch the method request
+
+=cut
around 'check' => sub {
my ($check, $self, @args) = @_;
);
};
+=head2 validate
+
+As with 'is_subtype_of', we need to dual dispatch the method request
+
+=cut
+
around 'validate' => sub {
my ($validate, $self, @args) = @_;
return (
);
};
+=head2 _compiled_type_constraint
+
+modify this method so that we pass along the constraining value to the constraint
+coderef and also throw the correct error message if the constraining value does
+not match it's requirement.
+
+=cut
+
around '_compiled_type_constraint' => sub {
my ($method, $self, @args) = @_;
my $coderef = $self->$method(@args);
};
};
-## if the constraining value has been added, no way to do a coercion.
+=head2 coerce
+
+More method modification to support dispatch coerce to a parent.
+
+=cut
+
around 'coerce' => sub {
my ($coerce, $self, @args) = @_;
if($self->has_constraining_value) {
push @args, $self->constraining_value;
+ ##Checking the type_coercion_map is probably evil
if(@{$self->coercion->type_coercion_map}) {
my $coercion = $self->coercion;
warn "coercion map found in $coercion found for $self";