Class::Trigger::Ordered を作る(前に)
# はじめに:このモジュールがキモく感じるのはなぜだろう?
以前にmiyagawaさんが Class::Trigger をオーバーホールすると言われていたので待っていたんですけれど、あの時アイデアをフィードバックしなかったのは我ながらイタイ。。
ショボくても構わないから、いつまでも引き篭もってないでアウトプットしる>自分
そうしないと成長できないよ。。。
と思ったので、今回はまず SYNOPSIS から先に書いてみる。
## Super Class package Hoge; use strict; use Class::Trigger::Ordered; # (or) use base qw/Class::Trigger::Ordered/; # noncompliant method __PACKAGE__->add_triggerpoints(qw{ INIT_HOOK MIDDLE_HOOK FINAL_HOOK }); sub new { bless {}, shift } sub run { my $self = shift; $self->call_trigger('INIT_HOOK'); $self->call_trigger('MIDDLE_HOOK'); $self->call_trigger('FINAL_HOOK'); } ## Inherit Class package Hoge::Moge; use base qw/Hoge/; __PACKAGE__->add_trigger( 'INIT_HOOK:20' => sub { print "hoge1\n" }, 'MIDDLE_HOOK:20' => sub { print "moge1\n" }, 'MIDDLE_HOOK:80' => sub { print "moge3\n" }, ); # or singular registration __PACKAGE__->add_trigger('INIT_HOOK', sub { print "hoge2\n" }, 21); __PACKAGE__->add_trigger('MIDDLE_HOOK' sub { print "moge2\n" }, 20); # push to (MIDDLE_HOOK -> 20) ## Main package main; use Hoge::Moge; my $hoge = Hoge::Moge->new; # this instance only $hoge->add_trigger('FINAL_HOOK:20' => sub { print "hoge last!\n" }); $hoge->run; hoge1 hoge2 moge1 moge2 moge3 hoge last!
※ あー、今あらためて書くと、Class::Trigger が継承する形式じゃないのは僕としてはちょっと不思議。わざわざクラスにメソッドを作ってあげてるんですね。mixin/pluggable についてもっと理解を深めないと。
※ 追記: 継承じゃないのは import 時に caller を確実に取るためっていうのも一因?気付けorz
…こんな感じでしょうか?
ちょっと今は作業できないけど今晩中に作るよー。>自分