Hatena::Groupdann

dann's blog このページをアンテナに追加 RSSフィード

Fork me on GitHub

2010-10-21

Web::Dispatcher::Simple, DBIx::Simple::DataSection, Text::MicroTemplate::DataSectionで3分Sinatra風quick hack

Web::Dispatcher::Simple, DBIx::Simple::DataSection, Text::MicroTemplate::DataSectionで3分Sinatra風quick hack - dann's blog を含むブックマーク はてなブックマーク - Web::Dispatcher::Simple, DBIx::Simple::DataSection, Text::MicroTemplate::DataSectionで3分Sinatra風quick hack - dann's blog Web::Dispatcher::Simple, DBIx::Simple::DataSection, Text::MicroTemplate::DataSectionで3分Sinatra風quick hack - dann's blog のブックマークコメント

Web::Dispatcher::Simple, DBIx::Simple::DataSectionとquick hackをするためのモジュールを作ってみました。これに加えて、Text::MicroTemplate::DataSectionを使うことで、3分くらいでsinatra風なアプリが簡単に作れます。

app.psgiを、以下のように書きます。

use strict;
use warnings;
use Web::Dispatcher::Simple;
use DBIx::Simple::DataSection;
use Text::MicroTemplate::DataSection qw(render_mt);

my $db = DBIx::Simple::DataSection->connect('dbi:SQLite:dbname=:memory:', '', '', { RaiseError => 1 });
$db->query_by_sql('create.sql');

my $app = router {
  get '/api' => sub {
      my $req = shift;
      my $hello = render_mt('index.mt');
      my $res = $req->new_response(200);
      $res->body($hello);
      $res;
  },
  post '/comment/{id}' => sub {
    my ($req, $args)  = @_;
    my $id = $args->{id};
    $db->query_by_sql('insert_person', $id);
    my $res = $req->new_response(200);
    $res;
  }
};

__DATA__
@@ create.sql
CREATE TABLE person (id)

@@ insert_person
INSERT INTO person VALUES (??)

@@ index.mt
<html>
 <body>Hello</body>
</html>

あとは、plackupで動かすだけです!

Enjoy!

# あとは、レスポンスをもっと簡単に返せると、sinatra風ですよね!