From b75e86cea265a51be8f66807ac7d39a0e83d893f Mon Sep 17 00:00:00 2001 From: Hans Dieter Pearcey Date: Mon, 3 Nov 2008 05:27:46 +0000 Subject: [PATCH] SweetArgs and test --- lib/MooseX/POE/SweetArgs.pm | 35 +++++++++++++++++++++++++++++++++++ t/06_sweet.t | 26 ++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 lib/MooseX/POE/SweetArgs.pm create mode 100644 t/06_sweet.t diff --git a/lib/MooseX/POE/SweetArgs.pm b/lib/MooseX/POE/SweetArgs.pm new file mode 100644 index 0000000..d985b5e --- /dev/null +++ b/lib/MooseX/POE/SweetArgs.pm @@ -0,0 +1,35 @@ +package MooseX::POE::SweetArgs; + +use Moose; +extends qw(MooseX::POE::Meta::Class); + +around add_state_method => sub { + my $orig = shift; + my ($self, $name, $method) = @_; + $orig->($self, $name, sub { + $method->(@_[POE::Session::OBJECT(), POE::Session::ARG0()..$#_]) + }); +}; + +1; + +=head1 NAME + +MooseX::POE::SweetArgs - sugar around MooseX::POE event arguments + +=head1 SYNOPSIS + + package Thing; + + # must come before MooseX::POE! + use metaclass 'MooseX::POE::SweetArgs'; + use MooseX::POE; + + # declare events like usual + event on_success => sub { + # unpack args like a Perl sub, not a POE event + my ($self, $foo, $bar) = @_; + ... + }; + +=cut diff --git a/t/06_sweet.t b/t/06_sweet.t new file mode 100644 index 0000000..31740d0 --- /dev/null +++ b/t/06_sweet.t @@ -0,0 +1,26 @@ +use strict; +use Test::More 'no_plan'; + +{ + package Counter; + use metaclass 'MooseX::POE::SweetArgs'; + + has count => (is => 'rw', default => 1); + + sub START { + my ($self) = @_; + $self->yield(add => 5); + } + + event add => sub { + my ($self, $n) = @_; + ::is(scalar @_, 2, 'correct number of args'); + $self->count( $self->count + $n ); + }; + + no MooseX::POE; +} + +my $counter = Counter->new; +POE::Kernel->run; +is($counter, 6, 'correct final count');