retrospectiva拡張のススメ!
rails製プロジェクト管理ツールのretrospectiva。いわゆるtracのrailsクローン。rails製BTSならredmineとかもあるけれど、デザインと名前でretrospectivaを使ってます。
実は先日のセミナーで、retrospectivaの拡張について書くと言っていたんですが、改めて調べてみたら、公式で拡張の使い方が説明されてるの見つけて(しかも大分前からあったみたい)、取り立てて書くこともなくなっちゃったなぁと。。。
さすがにそれじゃあんまりなので、サンプルでチケットに期限を入れられる拡張を作ってみます。
対象のバージョンは、r502のtrunkでやっていきます。いつの間にかrails2.0対応になってるしね。Rubyの環境がなければhttp://retrospectiva.org/wiki/Quick%20installに沿ってインストールしてください
Rubyの環境が整っていれば、
svn co http://retrospectiva.googlecode.com/svn/trunk retrospectiva mv config/database.yml.todo config/database.yml vi config/database.yml(とりあえずdevelopmentだけ設定) mysql -uroot -e "create database retrospectiva default charset=utf8" rake RAILS_ENV=production db:retro:load rake RAILS_ENV=production db:migrate ./script/server
で、http://localhost:3000にアクセスすると、retrospectivaが見れます。
とりあえず、右上のAdminメニューから適当にプロジェクトを作って、チケットも一つつくってください。簡単のため、チケットを作ってから、後で期日を入れられるようにします。拡張名はticket_dueとします。
まずはextensionsの下に、ticket_dueというディレクトリを作ります。今回のコーディング作業は全てこの中だけで行うことにします。
■拡張用migration
まずは、この拡張用にticketsテーブルに期日カラムを追加したいんだけど、ここでdb/migrateなんかに新しく作るわけにもいかない。でもちゃんと拡張用のmigrationの仕組みも用意されてる。
ticket_dueの下に、db/migration.rbというファイルを作る
module Retrospectiva
module Extension
module TicketDue
class Migration < ::ActiveRecord::Migration
def self.up
add_column :tickets, :due_at, :datetime
end
def self.down
remove_column :tickets, :due_at
end
end
end
end
end
あとで作ったextensionのインストールをするんだけれど、その時に勝手にこいつが実行される。カッコいい
■表示の拡張
次に表示させる箇所を設定します。
tiket_dueの直下にext_info.rbというファイルを作って、次の内容を記述
RetroEM::Views.register_extension('ticket_due/due', :ticket, :info, :bottom)
これをやると、app/viewsの方にあるテンプレートファイルの中で、
<%= view_extensions(:ticket, :info, :bottom) %>
って書いてある部分に、指定したファイルの内容が挿入されます。
本体を全くいじりたくないので、今回はもともとview_extensionsが書いてあるところだけが拡張できる部分になります。
で、今回はtiket_due/dueというテンプレートを指定してるので、そのファイルをextension/ticket_due/views/ticket_due/_due.html.erbとして作る
とりあえず内容はこんな感じかな
<code> <tr>
<th class="horz">期日:</th>
<td>
<span id="ticket-due"><%= @ticket.due_at.to_s %></span>
<%= ipeh_for_ticket_due_at(@ticket) %>
</td>
<th class="horz"></th><td></td>
</tr></code>
ipeh_for_ticket_due_at(@ticket)ってのは、この次に作るヘルパー。編集用フォームを表示してくれるヘルパーです。
■ヘルパーの追加
TicketsHelperにipeh_for_ticket_due_atを追加する時は、ticket_due/ext/tickets_helper.rbを作る
module Retrospectiva
module Extension
module TicketDue
module TicketsHelperExtension
def ipeh_for_ticket_due_at(ticket)
tag_id = "ticket-due"
options = {:no_wrap => true}
options[:url] = {:controller => 'tickets', :action => 'modify_due', :id => ticket.id}
inplace_editor_handle('期日設定', tag_id, options)
end
end
end
end
end
TicketsHelper.send(:include, Retrospectiva::Extension::TicketDue::TicketsHelperExtension)
■アクションの追加
ヘルパーで変更用アクションを、tickets_controllerのmodify_dueアクションと指定したので、次はtickets_controllerの拡張だね。基本はhelperと同じ
module Retrospectiva
module Extension
module TicketDue
module TicketsControllerExtension
def modify_due
@ticket = Project.current.tickets.find(params[:id])
@ticket.due_at = params[:value]
@ticket.save
render :text => @ticket.due_at.to_s(:db)
end
end
end
end
end
TicketsController.send(:include, Retrospectiva::Extension::TicketDue::TicketsControllerExtension)
■インストール
$ ruby script/rxm install ticket_due RAILS_ENV=production
これで、マイグレーションも実行されて、期日設定もできるようになってるはず
本体は全くいじってないのに、こんな簡単に拡張できちゃう。retrospectivaってよくできてるよね
押忍
- 前のエントリー: warningをエラーにする方法
- 次のエントリー: カラーピッカーを使ってみた
- 0人の推薦記事
- 0人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
-
- あとで読むRailsのススメ 最新エントリ
- ホワイトペーパー
- 企画特集
そのストレージで仮想化に対応できますか?
ストレージメディア特設サイト開設
集積度も性能も、業界最高水準のブレードPC
御社のログ活用しませんか!?
ESBでIT投資の無駄を劇的に解消する
今注目の「サジェスト検索」−デモ掲載中
ロリポップ!がリニューアル
インターネット上の悪意を未然に防ぐには?
セキュリティ&ユーザ事例【SIer Club】
◆エン・ジャパン厳選求人☆毎週更新◆
SOA、BPM、SaaS −今、企業に必要なこと
中小企業のセキュリティリスクとは?
パンデミック対策特集
【徹底対談】運用管理ツールの賢い使い方
仮想環境を実現するソリューション特集
- サーバー監視・運用のコストを削減するには
- エンタープライズにおけるSUSEの強み
- ■ストレージ容量50%削減保証■
- サービス・ドリヴン・データセンター
- 話題のタグ
Windows 7はLinuxへの切替が簡単:注目の仮想ディスクフォーマット「VHD」
iPhone OS 3.0で変わった「絵文字」
OSSのクラウド基盤「Eucalyptus」を使う(4)--インストール〜ノード構築
俳優経験者が指南する「人前で上手く話すためのティップス10選」
「うるまでるびペイント」登場:絵は上手下手ではなく制作過程に楽しみが
待てば回路の日和あり--「iPhone 3GS」発売、しかし――