Redmineのプラグイン作ってみた
よくわからない先入観で面倒くさいイメージがあったんだけど
http://d.hatena.ne.jp/mallowlabs/20081121/1227298411
http://www.redmine.org/wiki/redmine/Plugins
を見て作ってみたら思いのほか簡単(15分くらい)に出来てしまった。
ソースコード
init.rb
require 'redmine' Redmine::Plugin.register :redmine_bugcloud do name 'Redmine Bugcloud plugin' author 'maedana' description 'This is a plugin for Redmine. The view that displays the ticket like the tag cloud is added. ' version '0.0.1' permission :bugcloud, { :bugcloud => [:index] }, :public => true menu :project_menu, :bugcloud, { :controller => 'bugcloud', :action => 'index' }, :caption => :bugcloud, :last => true end
app/controller/bugcloud
@projectは当初使わないからいいやと思って、ローカル変数にしてたんだけど、@にしないとメニューなどが一切表示されなくなってしまうので必須。
あと、unloadableって書かないとdevelopmentで動かした時にリロードするとエラーになる。でもなんでなのかわからなくて気持ち悪い。
class BugcloudController < ApplicationController unloadable def index @project = Project.find params[:id] @issues = @project.issues end end
app/views/bugcloud/index.html.erb
スタイルシートを使いたい場合は以下のように書くと使える。
<% content_for :header_tags do %> <%= stylesheet_link_tag 'bugcloud', :plugin => 'redmine_bugcloud' %> <% end %> <h2><%= l(:bugcloud) %></h2> <ul class="bugcloud"> <% @issues.each do |issue| -%> <li class="level<%= h issue.priority.position %>"> <%= link_to h(issue.subject), :controller => 'issues', :action => 'show', :id => issue %> </li> <% end -%> </ul>
全体のソースは以下においた。
http://github.com/maedana/redmine_bugcloud/tree/master
気になったこと
developmentモードで動かすと、自作pluginのviewに対してアクセスすると初回は問題ないが、2度目にアクセスすると
A copy of ApplicationController has been removed from the module tree but is still active!
などというメッセージとともにArgumentErrorが発生する。production環境だと発生しない。今のところ原因がよくわからない。
(追記)
http://d.hatena.ne.jp/tomisima/20090126/1232994598
に書いてあるようにcontrollerでunloadableを呼ぶとエラーは起きなくなる。つか公式サイトのプラグイン作成チュートリアルにも書いてあった。ちゃんと読もう > 自分