本を読む

読書やコンピュータなどに関するメモ

Bash on Railsを作る(12) Controllerの例

 bashの内蔵コマンドだけでいかにRuby on Railsっぽいことをやるかというパロディ企画です。

 ちょっと間があいてしまったので、今回はデモのときにscaffoldで自動生成したController定義(app/controllers/members_controller.sh)を載せてみます

 基本的には、Ruby on Railsのscaffoldで生成したControllerを劣化コピーしたものです。けっこう力まかせです。

 OOもどきのbashOOでbase_controllerクラスを継承したmembers_controllerクラスを作り、indexとかlistとかnewとかのクラスメソッドを定義しています。各メソッドの中では、O/RマッパーもどきのSHarを使ってデータを操作しています。このファイル自身は、テンプレートエンジンのeBashを使って生成しています。

function members_controller::class.index() {
    local class=$1
    ${class}.render :action=list
}

function members_controller::class.list() {
    local class=$1
    ${class%_controller}.find ${class%_controller}_list :all
}

function members_controller::class.show() {
    local class=$1
    ${class%_controller}.find current_item :conditions="id = '$params_id'"
    ${class%_controller}.bless current_item
}

function members_controller::class.new() {
    local class=$1
    ${class%_controller}.new current_item
}

function members_controller::class.create() {
    local class=$1
    ${class%_controller}.new current_item 'params_current_item'
    current_item.save
    ${class}.redirect_to :action=list
}

function members_controller::class.edit() {
    local class=$1
    ${class%_controller}.find current_item :conditions="id = '$params_id'"
    ${class%_controller}.bless current_item
}

function members_controller::class.update() {
    local class=$1

    ${class%_controller}.find current_item :conditions="id = '$params_id'"
    ${class%_controller}.bless current_item
    current_item.update_attributes 'params_current_item'
    ${class}.redirect_to :action=show :id="$current_item_id"
}

function members_controller::class.destroy() {
    local class=$1

    ${class%_controller}.delete "$params_id"
    ${class}.redirect_to :action=list
}

base_controller.extend members_controller

注意:Bash on Railsは、実用性を無視したパロディソフトです。誤解のないようお願いします。

修正2008-3-19:「敬称」→「継承」

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/368-5e18e013

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad