https://github.com/takeyuweb/mizinco
小さなCGIプログラムの構築をより手軽に行えるようにすることが目的のRackベースの簡易フレームワークです。(開発中)
https://github.com/takeyuweb/mizinco
Last synced: about 1 year ago
JSON representation
小さなCGIプログラムの構築をより手軽に行えるようにすることが目的のRackベースの簡易フレームワークです。(開発中)
- Host: GitHub
- URL: https://github.com/takeyuweb/mizinco
- Owner: takeyuweb
- License: mit
- Created: 2010-01-07T04:53:17.000Z (over 16 years ago)
- Default Branch: master
- Last Pushed: 2010-02-09T11:08:34.000Z (over 16 years ago)
- Last Synced: 2025-06-12T14:05:26.311Z (about 1 year ago)
- Language: Ruby
- Homepage: http://d.hatena.ne.jp/mizincogrammer/
- Size: 85 KB
- Stars: 4
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.rdoc
- License: MIT-LICENSE
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