Skip to content

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

License

Notifications You must be signed in to change notification settings

Epictetus/mizinco

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 => '<b>Hello World</b>' # => "&lt;b&gt;Hello World&lt;/b&gt;"
end

get 'html' do
  render :html => '<b>Hello World</b>' # => "<b>Hello World</b>"
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

<html>
  <head></head>
  <body>
    <%= @message %>
  </body>
</html>

ヘルパメソッド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 © Yuichi Takeuchi, under MIT License

Yuichi Takeuchi <mizincogrammer@gmail.com>

d.hatena.ne.jp/mizincogrammer

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published