新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2009-11-19

[Perl]MojoをMouseでextendsしてみる

手始めに、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見たいな事が出来るんですね。

0 件のコメント: