An open API service indexing awesome lists of open source software.

https://github.com/takeyuweb/mizinco

小さなCGIプログラムの構築をより手軽に行えるようにすることが目的のRackベースの簡易フレームワークです。(開発中)
https://github.com/takeyuweb/mizinco

Last synced: about 1 year ago
JSON representation

小さなCGIプログラムの構築をより手軽に行えるようにすることが目的のRackベースの簡易フレームワークです。(開発中)

Awesome Lists containing this project

README

          

= mizinco

== mizincoとは
小さなCGIプログラムの構築をより手軽に行えるようにすることが目的のRackベースの簡易フレームワークです。
Sinatra風味のDSLを提供します。

require 'mizinco'

get 'index' do
render :text => 'Hello, "Mizinco" World!!'
end

set :app_name, "hello world"
use Rack::ShowExceptions

run!

Rackベースで、Rackミドルウェアを利用可能な他、適切なファイルを用意すればCGIの他にもFastCGIやrackup等でも動きます。

開発中なので不備も多いです。

== ルーティング
mizincoは、HTTPメソッドと_actパラメータの値の組で実行するブロックを決定します。
パスではなくパラメータを使ったのは、簡単な誰でも設置できるCGIプログラムを考えたとき、mod_rewrite等を使う必要のないこの方法の方が良いと判断したためです。
mod_rewriteを理解している方は、.htaccessを使ってパスをパラメータに分解するなどすれば良いと思います。

get '' do
# Read
end

post '' do
# Create
end

put '' do
# Update
end

delete '' do
# Delete
end

なお、_actパラメータの値は空でも"index"も同じとして扱います。
また、POSTメソッドで_methodパラメータを渡すことでHTTPメソッドオーバーライドを行います。

== パラメータへのアクセス
ブロック内でparamsを使ってアクセスできます。

get 'index' do
params['hoge'] # => 'fuga'
end

== View
Rails風のrenderメソッドを用意しています。
省略した際には、ブロック実行後デフォルトのテンプレートを使います。

get 'index' do
render # views/index.html.erb
end

明示的にテンプレートを指定することも出来ます。

get 'hoge' do
render :index # views/index.html.erb
end

文字列を渡した時は、ファイル名として認識します。

get 'hoge' do
render 'path-to-file/fuga.erb' # views/path-to-file/fuga.erb
end

直接文字列を表示する時には、:text:htmlオプションを使います。

get 'text' do
render :text => 'Hello World' # => "<b>Hello World</b>"
end

get 'html' do
render :html => 'Hello World' # => "Hello World"
end

:inlineで文字列を渡すと、ERBテンプレートとして扱われます。

get 'index' do
render :inline => '<%= "Hello" %>'
end

なお、テンプレートは標準で./viewsディレクトリ下に配置しますが、他のディレクトリに設定することもできます。

set :template_root, File.join(File.dirname(__FILE__), 'templates')

=== テンプレート内での変数の参照
ブロック内で定義したインスタンス変数にアクセスできます。

get 'index' do
@message = 'Hello World!!'
end

views/index.html.erb



<%= @message %>

ヘルパメソッドhを使うことでエスケープされます。

=== ヘルパメソッドの定義
ヘルパメソッドを定義したモジュール(ヘルパモジュール)を作り、helperで使用を宣言します。

module MyHelperA
def a(str)
"a:#{str}"
end
end

module MyHelperB
def b(str)
"b:#{str}"
end
end

helper MyHelperA, MyHelperB

get 'index' do
render :inline => "<%=a 'Hello'%> <%=b 'World'%>"
end

== リダイレクト
redirect_toメソッドを使います。

シンボルを渡すと、指定したアクションにリダイレクトします。

get 'index'
redirect_to :target
end

get 'target'
render :text => 'ここはリダイレクト後のページです。'
end

文字列を渡すと、URLとして解釈します。

get 'index'
redirect_to 'http://www.yahoo.co.jp/'
end

デフォルトでは302リダイレクトですが、301リダイレクトを行うこともできます。

get 'old'
redirect_to :new, :permanent => true
end

get 'new'
render :text => 'ここは新しいページです。'
end

== フィルタ
Before / After Filter を利用できる。

before do
# アクションの前で実行されるブロック
end

after do
# アクションの後で実行されるブロック
end

:onlyで実行したいアクションを、:exceptで実行しないアクションを指定できる。
アクション名はSymbolか文字列で指定する。複数の時は配列を使える。

before :only => :hoge do
# hoge でのみ実行されるブロック
end

before :except => [:hoge, :fuga] do
# hoge/fuga 以外で実行されるブロック
end

同じアクションに対して複数のフィルタが定義されている場合は、定義順に実行される。

before do
# 最初
end

before do
# 2番目
end

明示的に false を返した場合、フィルタ・アクションの実行をそこで中断する。

before :except => :logout do
redirect_to :logout
false
end

before do
# logoutアクション以外ではこのフィルタまで処理がまわってこない
end

== 作者

Copyright 2009 (c) Yuichi Takeuchi, under MIT License

Yuichi Takeuchi

http://d.hatena.ne.jp/mizincogrammer