【4日目】Redmine - チケットのフィルタに独自の項目を入れ込む方法
Redmine Advent Calendar jp 2011 : ATND 4日目です。
現行のRedmineだともっとスマートに書けるかもしれません。
良い実装をご存知のかた、ぜひ、教えてください :D
Hudson プラグインが入れ込んだもの
Hudson Plugin をインストールすると、チケットのフィルタに
- Hudson(ジョブ名)
- Hudson(ビルド番号)
という、見慣れない項目が登場します。これがそうですね。
フィルタを管理しているのはどこ?
Query クラスが親玉です。狙いどころは以下。
available_filters でジョブ番号とビルド番号を項目に追加して、
sql_for_field で追加した項目に応じたSQLを作成できるようにすれば良い訳です。
奥義! alias_method_chain!
時間がないのでいきなり奥義。
上記の Query#available_filters, Query#sql_for_field は新しい項目を追加できるように設計されていません。
また、Query クラスを入れ替えることもできないので、Queryクラスを継承してメソッドをオーバーライドする戦法も取れません。
手詰まり… orz
そこで登場するのが alias_method_chain です。
Query.class_eval do alias_method_chain :available_filters, :redmine_hudson end
のように書いておくと(ここちょっと自信ない)、
- available_filers を available_filters_with_redmine_hudson でオーバーライドする
- 元のメソッドは available_filters_without_redmine_hudson で呼び出すことができる
ようになります。
これを使ってあれこれすれば、フィルタに項目を追加することができるのですが……。
時間がなくなったので今日はここまで。2回目があれば続きを!