MooseX-Contract

+---------+
| WARNING |
+---------+

This module should be considered EXPERIMENTAL and should not be used in
critical applications unless you're willing to deal with all the typical
bugs that young, under-tested software has to offer!

+----------+
| SYNOPSIS |
+----------+

This module provides "Design by Contract" functionality using Moose
method hooks.

For example, in your Moose-built class:

	package MyEvenInt;

    use MooseX::Contract; # imports Moose for you!
	use Moose::Util::TypeConstraints;

	my $even_int = subtype 'Int', where { $_ % 2 == 0 };

	invariant assert { shift->{value} % 2 == 0 } '$self->{value} must be an even integer';

	has value => (
		is       => 'rw',
		isa      => $even_int,
		required => 1,
		default  => 0
	);

	contract 'add'
		=> accepts [ $even_int ]
		=> returns void;
	sub add {
		my $self = shift;
		my $incr = shift;
		$self->{value} += $incr;
		return;
	}

	contract 'get_multiple'
		=> accepts ['Int'],
		=> returns [$even_int];
	sub get_multiple {
		return shift->{value} * shift;
	}

	no MooseX::Contract;

INSTALLATION

To install this module, run the following commands:

	perl Makefile.PL
	make
	make test
	make install

SUPPORT AND DOCUMENTATION

After installing, you can find documentation for this module with the
perldoc command.

    perldoc MooseX::Contract

You can also look for information at:

    RT, CPAN's request tracker
        http://rt.cpan.org/NoAuth/Bugs.html?Dist=MooseX-Contract

    AnnoCPAN, Annotated CPAN documentation
        http://annocpan.org/dist/MooseX-Contract

    CPAN Ratings
        http://cpanratings.perl.org/d/MooseX-Contract

    Search CPAN
        http://search.cpan.org/dist/MooseX-Contract/


COPYRIGHT AND LICENCE

Copyright (C) 2009 Brian Phillips

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

