プロジェクト

全般

プロフィール

プラグイン Tips » 履歴 » バージョン 5

Toshiyuki Ando, 2009/06/28 11:38

1 1 Toshiyuki Ando
h1. プラグイン Tips
2
3 5 Toshiyuki Ando
{{>toc}}
4
5 1 Toshiyuki Ando
チュートリアルの域を超えそうなものはこちらに?
6
7
h2. 活動ページにプラグインの履歴を表示する
8
9
Hudson プラグインを例にとり、プラグインの履歴を表示する方法を紹介します。
10
11 2 Toshiyuki Ando
h3. 準備するもの
12 1 Toshiyuki Ando
13 2 Toshiyuki Ando
* 履歴の名前
14 3 Toshiyuki Ando
* 履歴を管理するクラス
15 2 Toshiyuki Ando
16
Hudson の場合は、
17
18
* 履歴の名前: hudson
19 3 Toshiyuki Ando
* 履歴を管理するクラス: HudsonBuild (ビルドを活動の履歴としたいので)
20 2 Toshiyuki Ando
21
としました。
22
23
h3. サイドバーに表示される履歴の名前に、自分のプラグインを追加する
24
25 1 Toshiyuki Ando
h4. 1. init.rb で活動ページに参加することを宣言する
26
27
以下のコードを Redmine::Plugin.register の中に追加します。
28
29
<pre><code class="ruby">
30 2 Toshiyuki Ando
  activity_provider :[履歴の名前], :class_name => '[履歴を管理するクラス]', :default => false
31 1 Toshiyuki Ando
</code></pre>
32
33
Hudson の場合は以下のようになります。
34 2 Toshiyuki Ando
default => false は、サイドバーのチェックボックスの状態で、最初表示した時にはチェックされないことを意味します。
35 1 Toshiyuki Ando
36
<pre><code class="ruby">
37
  activity_provider :hudson, :class_name => 'HudsonBuild', :default => false
38
</code></pre>
39
40 2 Toshiyuki Ando
h4. 2. 権限に view_[履歴の名前] を追加する
41 1 Toshiyuki Ando
42
活動の履歴では権限をチェックします。
43 2 Toshiyuki Ando
現在ログインしているユーザが履歴を閲覧してよいかどうかは、 *view_[履歴の名前]権限が許されているかどうか* に依存します。
44 1 Toshiyuki Ando
45 2 Toshiyuki Ando
Hudsonプラグインで言うと、履歴の種類が hudson なので、 *view_hudson* 権限が必要です。
46
*init.rb に記述する権限に view_hudson がないと、権限なしとみなされてサイドバーに履歴の名前が表示されません。*
47 1 Toshiyuki Ando
48
<pre><code class="ruby">
49
  project_module :hudson do
50
    # パーミッション設定。
51
    permission :view_hudson, {:hudson => [:index, :history]}  # !!ここ大事!!
52
    permission :build_hudson, {:hudson => [:build]}, :require => :member
53
    permission :edit_hudson_settings, {:hudson_settings => [:edit, :joblist]}
54
  end
55
</code></pre>
56
57
h4. 3. 言語ファイルに label_[イベントの種類]_plural というエントリを追加する
58
59
サイドバーに表示する用語は、 label_[イベントの種類]_plural に統一されています。
60
Hudsonだと label_hudson_plural ですね。
61
言語ファイルに登録しておかないと label_hudson_plural が表示されるという、格好悪いことになります。
62 3 Toshiyuki Ando
63
h3. 履歴を表示する
64
65 4 Toshiyuki Ando
h4. 1. 履歴を管理するクラスに、 project, author のプロパティを用意する
66 1 Toshiyuki Ando
67 4 Toshiyuki Ando
履歴を表示する際に、 project, author のプロパティが必要となります。
68
HudsonBuild には project, author がなかったので、
69
70
* project => 親のjobから借りてくる
71
* author => でっちあげる(caused_by という列を用意して、Redmine Admin(user_id=1)が起動したことにする)
72
73
ことにしました。
74
75
h4. 2. 履歴を管理するクラスに、acts_as_event を追加する
76
77
コードを参考に追加してみてください。
78
79 3 Toshiyuki Ando
<pre><code class="ruby">
80
  acts_as_event :title => Proc.new {|o| "#{l(:label_build)} #{o.job.name} #{o.number}: #{o.result}"},
81
                :description => "",
82
                :datetime => :finished_at
83
</code></pre>
84 1 Toshiyuki Ando
85 4 Toshiyuki Ando
|:title      |表題に利用されます                          |
86
|:description|詳細…斜体で表示されている部分に利用されます|
87
|:datetime   |発生した日時に利用されます                  |
88
89
Proc.new は自分的にはおまじない…(^^; o が表示対象のオブジェクトと考えれば大丈夫なはず。
90
91
h4. 3. 履歴を管理するクラスに、acts_as_activity_provider を追加する
92
93
同じくコードを参考に…。
94
95 3 Toshiyuki Ando
<pre><code class="ruby">
96 1 Toshiyuki Ando
  acts_as_activity_provider :type => 'hudson',
97 3 Toshiyuki Ando
                             :timestamp => "#{HudsonBuild.table_name}.finished_at",
98 4 Toshiyuki Ando
                             :author_key => "#{HudsonBuild.table_name}.caused_by",
99 1 Toshiyuki Ando
                             :find_options => {:include => {:job => :project}}
100
</code></pre>
101
102 4 Toshiyuki Ando
|:type        |履歴の名前にあわせましょう        |
103
|:timestamp   |発生した日時を表す列              |
104
|:find_options|多分ですが、プロジェクトを探す方法|
105 3 Toshiyuki Ando
106 4 Toshiyuki Ando
:find_options ですが、例で言うと、HudsonBuild から job(HudsonJob)をたどって、project(Project)を探してくださいという意味になります。