読者です 読者をやめる 読者になる 読者になる

ぱいぱいにっき

Pythonが好きすぎるけれど、今からPerlを好きになりますにっき

Nephia::Plugin::Tengというものをリリースさせて頂きました

Perl Nephia

ウッス、マコピーです。

コレリリースしました
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Nephia::Plugin::Teng - Simple ORMapper Plugin For Nephia - metacpan.org
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
ウッス!!!!!!!!

なんというか、シノープシスにあるように、超軽量オーアルマッパーであるTengを超お手軽にNephia内で使うようにする的なやつです。

t/nephia-test_app/以下にサンプルアプリ的な感じでテスト用のアプリが突っ込んであるんですけれど、エッセンスだけ絞りだすと、

get '/person/:id' => sub {
    my $id = path_param('id');
    # バリデーションとかサニタイズとかちゃんとやってね(はぁと
    my $row = teng->single('person', { id => $id });
    # SELECT name, age FROM `person` WHERE id = ? (bind: $id); 的な
    return {
        id => $id,
        name => $row->name,
        age => $row->age
    };
};

みたいな感じでお手軽にDBにクエリ投げれます。
あともちろんですが、DBIで接続するための接続情報も記述よろしくお願いします。

例としましては、etc/conf/common.plなどに

+{
    'Plugin::Teng' => {
        connect_info => ['dbi:SQLite:dbname=data.db'],
        plugins => [qw/Pager SearchJoined/]
    },
};

とまあこんなかんじで読み込みたいpluginとか記述できます。

あと、起動時にスキーマ流し込みたいとかいう用途のためにdatabase_doというDSLも用意しています。

database_do <<'SQL';
CREATE TABLE IF NOT EXISTS `person` (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT,
    age INTEGER
);
SQL

こんなふうにするとpersonテーブルがないときだけアプリ起動時にスキーマ流しこむとかできるので便利です。

生でTeng使う場合と違ってシングルトン化を行なっているので投げる度に再接続とかしなくてよしなにやってくれます。
注意点として、起動時(database_doは実行後)の状態でTeng::Schema::Loaderを使って動的にスキーマをロードしているため、その後にスキーマを変更するようなクエリを発行した場合はうまいこと使えません。よしなにServer::Starterと組み合わせてKILLHUPを投げる等工夫してください。

あとサンプルアプリを書きました。

nephia/Nephia-UserItemViewer · GitHub

気張って最近出たばっかりの@さんのTeng::Plugin::SearchJoinedなんかも使っております。

おそらくはそれさえも平凡な日々: Teng::Plugin::SearchJoinedとSQL::Maker::JoinSelectとKyoto.pmの話

結構サクッと書いた適当アプリなのでpatches wellcomeでございます。
バリデーションとかもしかしたら甘いかもしれないので大目に見てください。