プラグイン Tips » 履歴 » リビジョン 6
リビジョン 5 (Toshiyuki Ando, 2009/06/28 11:38) → リビジョン 6/16 (Toshiyuki Ando, 2009/06/28 11:39)
h1. プラグイン Tips {{>toc}} チュートリアルの域を超えそうなものはこちらに? h2. 活動ページにプラグインの履歴を表示する Hudson プラグインを例にとり、プラグインの履歴を表示する方法を紹介します。 h3. 準備するもの * 履歴の名前 * 履歴を管理するクラス Hudson の場合は、 * 履歴の名前: hudson * 履歴を管理するクラス: HudsonBuild (ビルドを活動の履歴としたいので) としました。 h3. サイドバーに表示される履歴の名前に、自分のプラグインを追加する h4. 1. init.rb で活動ページに参加することを宣言する 以下のコードを Redmine::Plugin.register の中に追加します。 <pre><code class="ruby"> activity_provider :[履歴の名前], :class_name => '[履歴を管理するクラス]', :default => false </code></pre> Hudson の場合は以下のようになります。 default => false は、サイドバーのチェックボックスの状態で、最初表示した時にはチェックされないことを意味します。 <pre><code class="ruby"> activity_provider :hudson, :class_name => 'HudsonBuild', :default => false </code></pre> h4. 2. 権限に view_[履歴の名前] を追加する 活動の履歴では権限をチェックします。 現在ログインしているユーザが履歴を閲覧してよいかどうかは、 *view_[履歴の名前]権限が許されているかどうか* に依存します。 Hudsonプラグインで言うと、履歴の種類が hudson なので、 *view_hudson* 権限が必要です。 *init.rb に記述する権限に view_hudson がないと、権限なしとみなされてサイドバーに履歴の名前が表示されません。* <pre><code class="ruby"> project_module :hudson do # パーミッション設定。 permission :view_hudson, {:hudson => [:index, :history]} # !!ここ大事!! permission :build_hudson, {:hudson => [:build]}, :require => :member permission :edit_hudson_settings, {:hudson_settings => [:edit, :joblist]} end </code></pre> h4. 3. 言語ファイルに label_[履歴の名前]_plural label_[イベントの種類]_plural というエントリを追加する サイドバーに表示する用語は、 label_[履歴の名前]_plural label_[イベントの種類]_plural に統一されています。 Hudsonだと label_hudson_plural ですね。 言語ファイルに登録しておかないと label_hudson_plural が表示されるという、格好悪いことになります。 h3. 履歴を表示する h4. 1. 履歴を管理するクラスに、 project, author のプロパティを用意する 履歴を表示する際に、 project, author のプロパティが必要となります。 HudsonBuild には project, author がなかったので、 * project => 親のjobから借りてくる * author => でっちあげる(caused_by という列を用意して、Redmine Admin(user_id=1)が起動したことにする) ことにしました。 h4. 2. 履歴を管理するクラスに、acts_as_event を追加する コードを参考に追加してみてください。 <pre><code class="ruby"> acts_as_event :title => Proc.new {|o| "#{l(:label_build)} #{o.job.name} #{o.number}: #{o.result}"}, :description => "", :datetime => :finished_at </code></pre> |:title |表題に利用されます | |:description|詳細…斜体で表示されている部分に利用されます| |:datetime |発生した日時に利用されます | Proc.new は自分的にはおまじない…(^^; o が表示対象のオブジェクトと考えれば大丈夫なはず。 h4. 3. 履歴を管理するクラスに、acts_as_activity_provider を追加する 同じくコードを参考に…。 <pre><code class="ruby"> acts_as_activity_provider :type => 'hudson', :timestamp => "#{HudsonBuild.table_name}.finished_at", :author_key => "#{HudsonBuild.table_name}.caused_by", :find_options => {:include => {:job => :project}} </code></pre> |:type |履歴の名前にあわせましょう | |:timestamp |発生した日時を表す列 | |:find_options|多分ですが、プロジェクトを探す方法| :find_options ですが、例で言うと、HudsonBuild から job(HudsonJob)をたどって、project(Project)を探してくださいという意味になります。