Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

rack を使った簡易 Web フレームワークを作ってみた2

昨日の続きです。昨日の日記は説明不足だったかもと思ったのでちょっと補足。rack とは?って人は、rack について以下に詳しい説明が載ってます。

ウノウラボ Unoh Labs: RackでWebアプリのWebサーバー依存を無くす
http://labs.unoh.net/2007/05/rackweb.html

そんなわけで昨日の自作フレームワークを使って、tropy もどきを作ってみました。ソースはこんな↓感じです。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'hebo'
require 'kconv'

if RUBY_VERSION < '1.9.0'
  class Array
    def choice
      at(rand(size))
    end
  end
end

class Hebopy < Hebo::Application
  def index
    if request['id'] and request['title'] != '' and request['body'] !=''
      id = request['id']
      @db[id] = { 
        :title => request['title'].toutf8,
        :body => request['body'].toutf8,
      }
    end

    id ||= @db.keys.choice
    return create unless @db.exist?(id)
    @title = html_escape(@db[id][:title])
    @body = html_escape(@db[id][:body]).gsub(/\n/, "<br>")
    render("templates/page")
  end

  def create
    @id = create_id
    render("templates/create")
  end

  private
  def initialize
    @db = Hebo::Database.new('db/hebopy.pstore')
    @charset = "utf-8"
  end

  def create_id
    s = "0123456789abcdef"
    (1..s.length).inject(""){|r, x| r << s[rand(s.length)] }
  end
end

# Hebo.start Hebopy, :adapter => :webrick
Hebo.start Hebopy, :adapter => :cgi

へぼい tropy もどきだから、へぼぴーって名前にしてみました。実際に動いてる奴はこちら↓。
http://rocky.sakura.ne.jp/hebopy/

hebopy ソース一式はここ↓に置いてあります。
http://code.google.com/p/kenkiti/source/browse/trunk/ruby/hebo.rb/