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