最近やった事
CodeRepos始めた
コミッタ40人
typester++
ustreamで新ジャンル作った
札コラ
あと
Assurerの
コマンドバージョン
監視版作りたい
って事で本題
Class::ComponentとはNumber::Objectのドラフト版を作ってた時に、malaに「てんさい」と言われて調子に乗ってNumber::Objectのプラガブルな部分だけを取り出して作ったモジュール
Soozyカンファレンスのnaoyaいじりネタの時に、この事実を告白したらmalaが「そんな事言ってたっけ?」とか言われてちょっとナイーブになったというモジュール
プラガブルっぽいモジュールを比較的楽に作る為のベースモジュール
mala起源
Class::Componentは
Plagger,Catalyst,DBICの
プラガブルなところだけ
盗んで
Class::Accessorみたく
他から利用出来るようにした
モジュール
package Naoya; use strict; use warnings; use Class::Component; 1; # これだけでプラガブルアプリケーションに!
useするだけで使える!
これら三要素を拡張
説明
CatalystのPluginっぽいの
# Class::Componentより引用
no strict 'refs';
unshift @{"$c\::ISA"}, $pkg;
#@ISAにunshiftしてcomponentを継承
#@ISAを太らせていくCatalystのPluginみたいなの
モジュールの根っこの
機能を取っ替えひっかえ
したい時使う
標準で何個かComponent
付いてます。今回も省略
(Pod見てね)
プラガブルじゃないよね
Plaggerのhookみたいなの
DBICのメソッド拡張
二つできる
use strict; use warnings; use Naoya; Naoya->new->bell;
package Naoya;
use strict;
use warnings;
use Class::Component config =>
{ Jitensya => { sound => 'チリンチリン' } };
# jitensyaプラグインにhashrefでconfigを設定
1;
use Class::Component config =>
{ Jitensya => { sound => 'チリンチリン' } };
__PACKAGE__->load_components(
qw/ Autocall::InjectMethod /
);
# プラグインで定義したメソッドを生やすComponent
1;
__PACKAGE__->load_components(
qw/ Autocall::InjectMethod /
);
__PACKAGE__->load_plugins(qw/ Jitensya /);
# Jitensya プラグインをロード
package Naoya;
use strict;
use warnings;
use Class::Component config =>
{ Jitensya => { sound => 'チリンチリン' } };
__PACKAGE__->load_components(
qw/ Autocall::InjectMethod /
);
__PACKAGE__->load_plugins(qw/ Jitensya /);
1;
sub bell : Method {
my($self, $context, @args) = @_;
say $self->config->{sound};
}
# Attribute::Methodを使ってプラグインメソッドを定義
sub bell : Method {
my($self, $context, @args) = @_;
say $self->config->{sound};
}
# Naoya.pm で設定したconfigを利用
package Naoya::Plugin::Jitensya;
use strict;
use warnings;
use base 'Class::Component::Plugin';
use Perl6::Say;
sub bell : Method {
my($self, $context, @args) = @_;
say $self->config->{sound};
}
1;
実行するとチリンチリン
と音がなります
# 追加する
sub kernel : Hook('hacker') {
my($self, $context, @args) = @_;
say 'kernel大好き!';
}
# Attribute::Hook を使ってフックポイント追加
use strict;
use warnings;
use Naoya;
Naoya->new->bell;
Naoya->new->run_hook('hacker');
# hackerのフックポイント実行
実行するとチリンチリン
と音がなった後
Kernel大好き!と
叫びます
Pluginのメソッドに
彩りを与えます
CatalystのControllerっぽい
アレですアレ
Catalyst::DispatchType::*を
追加してChaindとか
Regexpみたいのを
追加出来るアレ

この意味わかりますか?
Konoimi Example
package Naoya::Attribute::Jkondo;
use strict;
use warnings;
use base 'Class::Component::Attribute';
sub register {
my($class, $plugin, $c, $method, $value) = @_;
$plugin->config->{sound} = 'わいが近藤や';
# config->{sound}の中身を強制的に上書き
}
1;
sub bell : Method : Jkondo {
my($self, $context, @args) = @_;
say $self->config->{sound};
}
# Attribute::Jkondoも追加
実行するとチリンチリン
ではなく
わいが近藤やと
怒鳴ります
Attributeを追加してくと
Pluginに面白い事させられる
あと、前回IT Proの時にはてなすたーのしゃつきてうんたらnaoyaさんをいじったらnaoyaさんがちょっと怒ってたから、今回ははてなすたーのしゃつきてはてなブックマークの宣伝すれば許して貰えそうだけど、配信にきをとられてなにもできんかた
はてブ
おしまい!