MooseX-MultiMethods

 view release on metacpan or  search on metacpan

Makefile.PL  view on Meta::CPAN


use strict;
use warnings;



use ExtUtils::MakeMaker;

WriteMakefile(
  DISTNAME  => 'MooseX-MultiMethods',
  NAME      => 'MooseX::MultiMethods',
  AUTHOR    => "Florian\ Ragwitz\ \<rafl\@debian\.org\>",
  ABSTRACT  => "Multi\ Method\ Dispatch\ based\ on\ Moose\ type\ constraints",
  VERSION   => '0.10',
  EXE_FILES => [ qw() ],
  (eval { ExtUtils::MakeMaker->VERSION(6.31) } ? (LICENSE => 'perl') : ()),
  PREREQ_PM    => {
    "MooseX::Types::Moose" => '0',
    "namespace::autoclean" => '0',
    "aliased" => '0',
    "MooseX::Method::Signatures" => '0.29',

lib/MooseX/MultiMethods.pm  view on Meta::CPAN

package MooseX::MultiMethods;
our $VERSION = '0.10';
# ABSTRACT: Multi Method Dispatch based on Moose type constraints

use Moose;
use Devel::Declare ();
use MooseX::Method::Signatures;
use Sub::Install qw/install_sub/;
use MooseX::Types::Moose qw/HashRef ClassName/;
use aliased 'Devel::Declare::Context::Simple' => 'DDContext';
use aliased 'MooseX::MultiMethods::Meta::Method' => 'MetaMethod';

use namespace::autoclean;


has _dd_context => (
    is      => 'ro',
    isa     => DDContext,
    lazy    => 1,
    builder => '_build_dd_context',
    handles => qr/.*/,

lib/MooseX/MultiMethods.pm  view on Meta::CPAN

    });
}

1;

__END__
=pod

=head1 NAME

MooseX::MultiMethods - Multi Method Dispatch based on Moose type constraints

=head1 VERSION

version 0.10

=head1 SYNOPSIS

    package Paper;    use Moose;
    package Scissors; use Moose;
    package Rock;     use Moose;
    package Lizard;   use Moose;
    package Spock;    use Moose;

    package Game;
    use Moose;
    use MooseX::MultiMethods;

    multi method play (Paper    $x, Rock     $y) { 1 }
    multi method play (Paper    $x, Spock    $y) { 1 }
    multi method play (Scissors $x, Paper    $y) { 1 }
    multi method play (Scissors $x, Lizard   $y) { 1 }
    multi method play (Rock     $x, Scissors $y) { 1 }
    multi method play (Rock     $x, Lizard   $y) { 1 }
    multi method play (Lizard   $x, Paper    $y) { 1 }
    multi method play (Lizard   $x, Spock    $y) { 1 }
    multi method play (Spock    $x, Rock     $y) { 1 }

lib/MooseX/MultiMethods/Meta/Method.pm  view on Meta::CPAN

package MooseX::MultiMethods::Meta::Method;
our $VERSION = '0.10';

use Carp;
use Moose;
use MooseX::Method::Signatures;
use MooseX::Types::Moose qw/CodeRef/;
use Devel::PartialDump qw/dump/;
use aliased 'MooseX::Types::VariantTable';

use namespace::autoclean;

lib/MooseX/MultiMethods/Meta/Method.pm  view on Meta::CPAN

    };
}

1;

__END__
=pod

=head1 NAME

MooseX::MultiMethods::Meta::Method

=head1 VERSION

version 0.10

=head1 AUTHOR

  Florian Ragwitz <rafl@debian.org>

=head1 COPYRIGHT AND LICENSE

t/conflict.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Test::Exception;

{
    package Foo;

    use Moose;
    use MooseX::MultiMethods;
    use MooseX::Types::Moose 'Int';

    multi method bar (Int $baz, Int $quux)  { }
    multi method bar (Int $baz, Int $quux?) { }
}

my $foo = Foo->new;

throws_ok(sub {
    $foo->bar(42, 23);

t/fail.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More tests => 1;
use Test::Exception;

{
    package Foo;
    use Moose;
    use MooseX::MultiMethods;
    multi method bar (Int $x, Num $y) {}
    multi method bar (Num $x, Int $y) {}
}

my $foo = Foo->new;
dies_ok(sub {
    $foo->bar(23, 42);
});

t/game-split.t  view on Meta::CPAN


{
    package Paper;    use Moose;
    package Scissors; use Moose;
    package Rock;     use Moose;
    package Lizard;   use Moose;
    package Spock;    use Moose;

    package Game;
    use Moose;
    use MooseX::MultiMethods;

    multi method play (Paper    $x, Rock     $y) { 1 }
    multi method play (Scissors $x, Paper    $y) { 1 }
    multi method play (Rock     $x, Scissors $y) { 1 }
    multi method play (Any      $x, Any      $y) { 0 }

    package Game::Extended;
    use Moose;
    use MooseX::MultiMethods;
    extends 'Game';

    multi method play (Paper    $x, Spock    $y) { 1 }
    multi method play (Scissors $x, Lizard   $y) { 1 }
    multi method play (Rock     $x, Lizard   $y) { 1 }
    multi method play (Lizard   $x, Paper    $y) { 1 }
    multi method play (Lizard   $x, Spock    $y) { 1 }
    multi method play (Spock    $x, Rock     $y) { 1 }
    multi method play (Spock    $x, Scissors $y) { 1 }
}

t/game.t  view on Meta::CPAN


{
    package Paper;    use Moose;
    package Scissors; use Moose;
    package Rock;     use Moose;
    package Lizard;   use Moose;
    package Spock;    use Moose;

    package Game;
    use Moose;
    use MooseX::MultiMethods;

    multi method play (Paper    $x, Rock     $y) { 1 }
    multi method play (Paper    $x, Spock    $y) { 1 }
    multi method play (Scissors $x, Paper    $y) { 1 }
    multi method play (Scissors $x, Lizard   $y) { 1 }
    multi method play (Rock     $x, Scissors $y) { 1 }
    multi method play (Rock     $x, Lizard   $y) { 1 }
    multi method play (Lizard   $x, Paper    $y) { 1 }
    multi method play (Lizard   $x, Spock    $y) { 1 }
    multi method play (Spock    $x, Rock     $y) { 1 }

t/lib/Foo.pm  view on Meta::CPAN

package Foo;
our $VERSION = '0.10';

use Moose;
use MooseX::MultiMethods;

use namespace::autoclean;

multi method foo (Int $x) { 'Int' }
multi method foo (Str $x) { 'Str' }

1;

t/lib/MXD.pm  view on Meta::CPAN

use MooseX::Declare;

class Scissor;
class Stone;
class Paper;

class ScissorStonePaper {
    use MooseX::MultiMethods;
    
    multi method play ( Scissor $x, Paper   $y ) { 1 }
    multi method play ( Stone   $x, Scissor $y ) { 1 }
    multi method play ( Paper   $x, Stone   $y ) { 1 }
    multi method play ( Any     $x, Any     $y ) { 0 }
}

1;

t/role.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More tests => 3;

{
    package MyRole;
    use Moose::Role;
    use MooseX::MultiMethods;

    multi method foo (Int $x) { 'Int' }
    multi method foo (Str $x) { 'Str' }
}
{
    package MyClass;
    use Moose;
    with 'MyRole';
}



( run in 0.503 second using v1.01-cache-2.11-cpan-8780591d54d )