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.