NAME MooseX::DeclareX::Keyword::interface - shiny syntax for MooseX::Interface SYNOPSIS use MooseX::DeclareX keywords => [qw/ class interface /], plugins => [qw/ guard build test_case /]; interface BankAccountAPI { requires 'deposit'; requires 'withdraw'; requires 'balance'; test_case numeric_balance { Scalar::Util::looks_like_number( $_->balance ) } } class BankAccount with BankAccountAPI { has owner => ( is => 'ro', isa => 'Str', required => 1, ); has balance => ( traits => ['Number'], is => 'rw', isa => 'Num', handles => { deposit => 'add', withdraw => 'sub', }, ); build balance { 0 } guard withdraw ($amt) { confess "insufficient funds" unless $self->balance >= $amt } } interface DDBankAccountAPI extends BankAccountAPI { requires 'setup_direct_debit'; requires 'pay_direct_debit'; } BankAccountAPI->meta->test_implementation( BankAccount->new ); DESCRIPTION This distribution adds a new keyword and a new plugin to MooseX::DeclareX. `interface` Defines an interface. An interface is much like a role, but with some heavy restrictions - it can't define any methods (just require implementing classes to define them), and it can only extend other interfaces, not roles. See MooseX::Interface for details. `test_case` Sets up test cases for an interface. BUGS Please report any bugs to . SEE ALSO MooseX::DeclareX, MooseX::Interface. AUTHOR Toby Inkster . COPYRIGHT AND LICENCE This software is copyright (c) 2012 by Toby Inkster. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. DISCLAIMER OF WARRANTIES THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.