The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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 http://rt.cpan.org/Dist/Display.html?Queue=MooseX-DeclareX-Keyword-interface.

SEE ALSO

MooseX::DeclareX, MooseX::Interface.

AUTHOR

Toby Inkster <tobyink@cpan.org>.

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.