Class::Trigger::Ordered 0.01

ソースが汚すぎて CPAN にうpできません・・・

僕がもしブクマするとすれば[これはひどい]だなとorz

明日 YAPC の講演聴きながらソース綺麗にしよっと。

todo:

  • add_trigger の際、毎回 backyard から全部データを持ってきて trigger 配列の再構築をしちゃってるので、そこら辺を回避、高速化。mod_perl で毎回 add しないようにすればそんなに問題ないけど…(主観)
  • inheritable のテストは一応できてるけどオブジェクトに trigger を追加した場合のテストが足りてない。
  • Class::Trigger の流儀を意識しすぎて、全体的にソースがぎこちない。もうちょっと素直に書いてみたいかも。
  • Class::Trigger リスペクトのために継承したけど… やってること違うし、上書きしまくってるしなぁ。。
  • ていうかテスト、テスト、テストモア!全然足りてなすっ

今日(03/30)テスト書いて明日upしようと思うので、一旦ソース引っ込めます。。

ちなみにこんな感じ:

#!/usr/bin/perl

use strict;
use warnings;

package Base;

use Class::Trigger::Ordered qw(
    INIT MIDDLE FINAL
);

sub new { bless {}, shift }

sub run {
    my $self = shift;
    $self->call_trigger('INIT');
    $self->call_trigger('MIDDLE');
    $self->call_trigger('FINAL');
}

__PACKAGE__->add_trigger('INIT:50' => sub { print "\tINIT:50\n" });

package A;

use base qw/Base/;

__PACKAGE__->add_trigger('INIT:10'  => sub { print "\tINIT:10\n" });
__PACKAGE__->add_trigger('FINAL:10' => sub { print "\tFINAL:10\n" });
__PACKAGE__->add_trigger('MIDDLE'   => sub { print "\tMIDDLE\n"   });

package main;

my $a = A->new;

$a->add_trigger('INIT:30' => sub { print "\tINIT:30\n" });

print "$a->run\n";

$a->run;

print "\n", "A->run\n";

A->run;

print "\n", "Base->run\n";

Base->run;

__END__

実行結果:

$a->run
        INIT:10
        INIT:30
        INIT:50
        MIDDLE
        FINAL:10

A->run
        INIT:10
        INIT:50
        MIDDLE
        FINAL:10

Base->run
        INIT:50

そのうちmiyagawaさんに見ていただければよいなぁと思います。