公開中の Redmine プラグイン

今、私が作って公開している Redmine のプラグインの紹介。

Redmine インフォメーション プラグイン
http://www.r-labs.org/projects/rp-admin-reports/wiki

もともと権限レポートやワークフローなど一般ユーザーでも見たいけど、管理者じゃないと見れない情報を表示するためのプラグイン。
ただ、今の売りはワークフローを図で表示すること。

もうちょっと追加したい機能はあるけど、一番つけたかった機能は完成したので、特に表示したい情報とかの要望でもない限りしばらくこのまま。



Redmine 用語集(Glossary) プラグイン
http://sourceforge.jp/projects/rp-glossary/wiki/FrontPage

Redmine を使ってみんなで用語集を作るためのプラグイン。
XP プログラミングでも言われているように、やっぱり用語集はほしいなということで作ったもの。

ある程度機能はつけたんだけど、結構バグが出てきちゃったので、今はこれを開発中。



Redmine TestLink Link プラグイン
http://sourceforge.jp/projects/rp-testlinklink/

テスト管理システムである TestLink へ Redmine からリンクを張るためのプラグイン。
TestLink から Redmine へのリンクは TestLink の機能であるけど、逆はなかったので作った。

しかし、現在はほぼ開発中止状態。
理由は TestLink 自体に個人的にあんまりはまらなかったため。ネットとかの評判は結構よかったんだけどな。
あと、後発でリンクではなく、埋め込み式でもっとよさそうなのプラグインができたので。

スポンサーサイト
 

Ruby で BOM 付き UTF-8 を出力する

Redmine など対応しているアプリが少ないため、まだ、 Ver. 1.8 ruby を使っているのですが、これだとスクリプトファイルは BOM 付きの UTF-8 には対応していません。(1.9 以上では対応してます)
それはそれでかまわないのですが、 ruby で BOM 付きの UTF-8 を出力したいことがあって、ちょっとやり方に迷ってしまったので、その対策方法です。

IO クラスの write 系は出力の前に文字列でなければ to_s を使って文字列に変換して出力してしまうので、バイトコードを指定して出力することはできません。
そこで、 文字列に BOM のバイトコード(0xEF 0xBB 0xBF)を格納して、変換されないようにして出力する必要があります。

def write_bom(fp)
bom = " "
bom[0] = 0xEF
bom[1] = 0xBB
bom[2] = 0xBF
fp.write(bom)
end

File.open("foo.txt", "w") {|fp|
write_bom(fp)
# 通常の出力
}

 

プラグイン開発記 - init.rb から Helper メソッドの呼び出し

プラグイン開発記では、プラグイン開発中の試行錯誤やどんなことを考えてつくっていたのかなど書いていきたいと思います。
今回は Redmine 用語集プラグインの Wiki マクロでエラーとなるバグの修正。
http://www.r-labs.org/issues/813

原因は Wiki マクロを定義している init.rb でリンク作成用に作った helper のメソッドを呼び出したため。
プラグイン開発ガイドinit.rb や lib では helper のメソッドは呼び出せないと書いていたのだけど、用語集のプラグインを作っている時はうまくいっていたみたいで呼び出せていた。 Redmine のバージョンが上がってうまくいかなくなったのか、たまたまうまくいってただけなのか原因はわからないけど。

どっちにしろ、バグを修正しなければいけないので、困った時は他の人の作ったプラグインのコードを見てみる。
まず、 Wiki External Filter のプラグインを見てみた。ヘルパーのクラス名を明示的に付けているだけで普通に呼び出していたので、マネしてみたがやっぱり動かない。

そこで、ふと app 内ならいいのかなと思って model クラスにリンク作成機能を付けてみた。用語(Term)へのリンクをつくるので、 Term.link というメソッドを作った方がしっくりくるような気もする。
で、やってみると  link_to が見つからないというエラーが発生してしまった。 そこで link_to が定義されている TagHelper を model クラス(Term) に include してみた。今度は url をつくるメソッドに nil を渡しているというよくわからないエラーが出てしまった。
結局、コントローラやアクションのハッシュを渡して url のパスを作成する処理は model ではできないらしい。

また、困ったので今度は Wiki Extensions のソースコードを見てみた。そこでは、 init.rb で ActiveView :::Base のクラスに作った helper ファイル include していた。これだと思ったので、マネしてみる。
Grossary 用の helper 全部を最初に include するのもどうかと思ったので、 リンク作成する部分だけを ActiveView::Helper メソッドとして別ファイルにした。 Wiki Extensions のソースでは helper のディレクトリではなく、 lib の方においてあったので、そっちに置いて、 Redmine を再起動。
今度は立ち上がらなくなった。
よく考えたら、 ActiveView::Helpers の内のモジュールにしたので、 lib/active_view/helper/ ディレクトリに置いておかないと Redmine のパスの推測に失敗するはず。ディレクトリを深くつくるのも面倒なので、直接 require でファイルをロードしてみて、もう一度再起動。
ようやくうまくいって、修正完了。

結局、 init.rb から helper メソッドの呼び出すには、次のような手順
  1. ActiveView::Helpers 内に作ったヘルパーモジュールに呼び出したいメソッドを書く
  2. 作ったヘルパーモジュールを init.rb で、 ActiveView::Base クラスに include する

require 'term_link_helper'

ActionView::Base.class_eval do
include ActionView::Helpers::TermLinkHelper
end

 
このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
43位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

05月 | 2017年06月 | 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。