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さんに見ていただければよいなぁと思います。