手始めに、MojoでMyAppをgenerateする。ここは
Mojo::Manual::GettingStartedに書いてあるのと同じ。
~/script/mojo$ mojo generate app MyApp
次に、MojoをMouseでextendsしたHamuChanというモジュールを用意する。
~/script/mojo/my_app$ cat lib/HamuChan.pm
package HamuChan;
use vars qw( $VERSION );
$VERSION = 0.001001;
use Mouse;
extends 'Mojo';
use Data::Dumper;
has action => ( is => 'rw', isa => 'Str' );
sub handler {
my ($self, $tx) = @_;
$self->action( 'default' );
$self->action( $tx->req->url->path->parts->[0] ) if defined $tx->req->url->path->parts->[0];
$tx->res->headers->header( 'x-powered-by', join( '/', __PACKAGE__, $VERSION ) );
}
no Mouse;
1;
__END__
lib/MyApp.pmを、HamuChanを利用するように変更する。
~/script/mojo/my_app$ cat lib/MyApp.pm
package MyApp;
use Mouse;
extends 'HamuChan';
use Data::Dumper;
after handler => sub {
my ($self, $tx) = @_;
# Hello world!
$tx->res->headers->content_type('text/plain');
$tx->res->body(
Dumper( [
$self->action,
$tx->res->headers->header( 'x-powered-by' )
] )
);
};
no Mouse;
1;
__END__
デーモンを起動。
~/script/mojo/my_app$ ./script/my_app daemon
Server available at http://127.0.0.1:3000.
ブラウザでアクセスすると、カスタマイズした箇所を表示する。
http://localhost:3000/aaaa
$VAR1 = [
'aaaa',
[
'HamuChan/0.001001'
]
];
ちゃんとactionが加わっている。パス指定が無い場合もHamuChanが取り回すようになっているので、
http://localhost:3000/
$VAR1 = [
'default',
[
'HamuChan/0.001001'
]
];
のようになる。
※Mouseって、最初からMooseX::NonMoose見たいな事が出来るんですね。