社内にNoPaste的なものがなくてカッとなって作っていたらsinatraライクなフレームワークを作っていた。何を言っているか(ry

nonopaste.png

NoNoPasteソースコード: http://github.com/kazeburo/NoNoPaste

元々、CloudForecastには、tokuhiromのMojaMojaやyusukebeのHitagiからコピペをしつつ作ったフレームワークがあり、NoPaste的なものを作成するにあたりCloudForecastからWAF部分だけを切り出して作り直した。

今回のWAFのコードはまだNoPasteのパッケージ内にある。名前はShirahata。

Shirataha.pm: http://github.com/kazeburo/NoNoPaste/blob/master/lib/Shirahata.pm

特徴は

  1. sinatraライクなURLの組み立て
  2. typesterさんのText::MicroTemplate::DataSectionExを利用してDATAにテンプレートを書きつつ、継承などをサポート
  3. 組み込みfillinformサポート
  4. Modelはナシ

あとはCatalyst風な”$c”も特徴かな。利用イメージとしてはCloudForecastのWeb画面のようなちょっとした管理ページ系かな

以下は簡単なサンプル

package MyApp;

use Shirahata -base;

get '/' => sub {
    my ( $self, $c )  = @_;
    # $c->req, $c->res, $c->stash, $c->args
    $c->render('index')
}

__DATA__
@@ base.mt
<html>
<head>
<title>My App</title>
</head>
<body>
<h1><a href="<?= $c->req->uri_for('/') ?>">MyApp</a></h1>
? block content => sub { }
</body>
</html>

@@ index.mt
? extends 'base'
? block content => sub {
<h2>Content</h2>
? fillinform( $c->req, sub {
<form method="post" action="/submit" id="submitf">
<label for="nick">nick</label>
<input type="text" id="nick" name="nick" value="" size="21" />
<input type="submit" id="submitb" value="POST" />
</form>
? })
? } #block content

呼び出すためのpsgi。

use strict;
use warnings;
use Cwd qw/realpath/;
use File::Basename qw/dirname/;
use MyApp;

my $root_dir = dirname( realpath(__FILE__) );
my $web = MyApp->new($root_dir);
$web->psgi;



Xslateも試してみていて、DATAをtempdirに書き出して、Xslateに読み込ませるとか考えたんだけど、一時ディレクトリの掃除が大変なのでやめた。DataSectionのXslate版はgfx曰く「絶賛考え中です!」なので楽しみにしている

CloudForecastにbackportするかどうか考え中

このブログ記事について

このページは、Masahiro Naganoが2010年7月 7日 01:48に書いたブログ記事です。

ひとつ前のブログ記事は「CloudForecast Updates」です。

次のブログ記事は「gearman の worker processのスコアボードをネットワーク越しに見えるようにした」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja