[Moose-commits] r7935 - MooseX-Dependent/trunk/lib/MooseX/Dependent
jnapiorkowski at code2.0beta.co.uk
jnapiorkowski at code2.0beta.co.uk
Fri May 15 19:05:06 GMT 2009
Author: jnapiorkowski
Date: 2009-05-15 12:05:06 -0700 (Fri, 15 May 2009)
New Revision: 7935
Added:
MooseX-Dependent/trunk/lib/MooseX/Dependent/Types.pm
Removed:
MooseX-Dependent/trunk/lib/MooseX/Dependent/Types/
Log:
hiearchy fixup
Copied: MooseX-Dependent/trunk/lib/MooseX/Dependent/Types.pm (from rev 7934, MooseX-Dependent/trunk/lib/MooseX/Dependent/Types/Types.pm)
===================================================================
--- MooseX-Dependent/trunk/lib/MooseX/Dependent/Types.pm (rev 0)
+++ MooseX-Dependent/trunk/lib/MooseX/Dependent/Types.pm 2009-05-15 19:05:06 UTC (rev 7935)
@@ -0,0 +1,152 @@
+package MooseX::Types::Dependent;
+
+use 5.008;
+
+use Moose::Util::TypeConstraints;
+use MooseX::Meta::TypeConstraint::Dependent;
+use MooseX::Types -declare => [qw(Depending)];
+
+our $VERSION = '0.01';
+our $AUTHORITY = 'cpan:JJNAPIORK';
+
+=head1 NAME
+
+MooseX::Types::Dependent - L<MooseX::Types> constraints that depend on values.
+
+=head1 SYNOPSIS
+
+ subtype UniqueInt,
+ as Depending[
+ Int,
+ sub {
+ shift->exists(shift) ? 0:1;
+ },
+ Set,
+ ];
+
+ subtype UniqueInt,
+ as Depending {
+ shift->exists(shift) ? 0:1;
+ } [Int, Set];
+
+Please see the test cases for more examples.
+
+=head1 DEFINITIONS
+
+The following is a list of terms used in this documentation.
+
+=head2 Dependent Type Constraint
+
+=head2 Check Value
+
+=head2 Constraining Type Constraint
+
+=head2 Constraining Value
+
+=head1 DESCRIPTION
+
+A dependent type is a type constraint whose validity is dependent on a second
+value. You defined the dependent type constraint with a primary type constraint
+(such as 'Int') a 'constraining' value type constraint (such as a Set object)
+and a coderef which will compare the incoming value to be checked with a value
+that conforms to the constraining type constraint. Typically there should be a
+comparision operator between the check value and the constraining value
+
+=head2 Subtyping a Dependent type constraints
+
+TDB: Need discussion and examples.
+
+=head2 Coercions
+
+TBD: Need discussion and example of coercions working for both the
+constrainted and dependent type constraint.
+
+=head2 Recursion
+
+Newer versions of L<MooseX::Types> support recursive type constraints. That is
+you can include a type constraint as a contained type constraint of itself.
+Recursion is support in both the dependent and constraining type constraint. For
+example:
+
+=head1 TYPE CONSTRAINTS
+
+This type library defines the following constraints.
+
+=head2 Depending[$dependent_tc, $codref, $constraining_tc]
+
+Create a subtype of $dependent_tc that is constrainted by a value that is a
+valid $constraining_tc using $coderef. For example:
+
+ subtype GreaterThanInt,
+ as Depending[
+ Int,
+ sub {
+ my($constraining_value, $check_value) = @_;
+ return $constraining_value > $check_value ? 1:0;
+ },
+ Int,
+ ];
+
+Note that the coderef is passed the constraining value and the check value as an
+Array NOT an ArrayRef.
+
+This would create a type constraint that takes an integer and checks it against
+a second integer, requiring that the check value is greater. For example:
+
+ GreaterThanInt->check([5,10]); ## Fails, 5 is less than 10
+ GreaterThanInt->check(['a',10]); ## Fails, 'a' is not an Int.
+ GreaterThanInt->check([5,'b']); ## Fails, 'b' is not an Int either.
+ GreaterThanInt->check([10,5]); ## Success, 10 is greater than 5.
+
+=head1 EXAMPLES
+
+Here are some additional example usage for structured types. All examples can
+be found also in the 't/examples.t' test. Your contributions are also welcomed.
+
+TBD
+
+=cut
+
+Moose::Util::TypeConstraints::get_type_constraint_registry->add_type_constraint(
+ MooseX::Meta::TypeConstraint::Dependent->new(
+ name => "MooseX::Types::Dependent::Depending" ,
+ parent => find_type_constraint('ArrayRef'),
+ constraint_generator=> sub {
+ my ($dependent_val, $callback, $constraining_val) = @_;
+ return $callback->($dependent_val, $constraining_val);
+ },
+ )
+);
+
+=head1 SEE ALSO
+
+The following modules or resources may be of interest.
+
+L<Moose>, L<MooseX::Types>, L<Moose::Meta::TypeConstraint>,
+L<MooseX::Meta::TypeConstraint::Dependent>
+
+=head1 TODO
+
+Here's a list of stuff I would be happy to get volunteers helping with:
+
+=over 4
+
+=item Examples
+
+Examples of useful code with both POD and ideally a test case to show it
+working.
+
+=back
+
+=head1 AUTHOR
+
+John Napiorkowski, C<< <jjnapiork at cpan.org> >>
+
+=head1 COPYRIGHT & LICENSE
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
More information about the Moose-commits
mailing list