Giter VIP home page Giter VIP logo

mizinco's Introduction

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 <[email protected]>

d.hatena.ne.jp/mizincogrammer

mizinco's People

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.