redmine trunkを落としてglossary pluginが動くか試してみる(続々々) - torutkのブログにおいて、GlossaryプラグインのRedmine 4.0対応に難航し暗礁に乗り上げてしまったので、別アプローチとしてゼロからGlossaryプラグインを作成する作業を5月1日より開始しています。この作業を通じてRedmineのプラグイン作成に習熟できたなら、既存のGlossaryプラグインのRedmine 4.0(Rails 5.1)対応の修正をすることも容易になるだろうし、あるいはゼロから作った新Glossaryプラグインを主とし、既存のデータベースのマイグレーションを用意するのもの可能になるのかと思います。
ゼロからGlossaryプラグインを作る過程を、次のWikiに絶賛記載途中です。
Redmine Glossaryプラグイン再構築 - ソフトウェアエンジニアリング - Torutk
ステップバイステップで小さなプラグインから開始しています。最初は、モデルクラス1つ、コントローラー1つ、アクションに対応するビューが少々で、プロジェクトとの関連もない、権限の設定もないシンプルなものを作っています。本日時点でやっと一通り出来てきました。次はモデルクラスを2つに増やすところです。
ゼロからの作成作業をしていて、気づいたこと、知ったことなどを時々こちらの日記に書いていきます。
国際化対応テキストの変換メソッド名
Redmineのコードでは、ビュー(.erb)でよく見かけるのが"l"(エル)メソッドです。
<%= link_to l(:button_edit) ... %>
Rails関係を調べると、RailsのI18n.translateメソッドの省略(ヘルパーメソッド)でtが、I18n.localizeメソッドの省略でlが利用できます。localaize(l)は、日付・時刻などをロケールに合わせた表現に変換するものです。
Redmineでは、なぜlメソッドを使っているのかとても悩みました。tの間違いでは?でもならなぜ正常に機能しているのか不思議でした。
調べると、Redmineのlメソッドは内部でRailsのI18n.tを呼び出していました。
最初RedmineのlとRailsのlと同じ名前の関数で混同していましたが、やっと腑に落ちました。それにしても紛らわしいですね。
link_to で確認ダイアログを表示
削除アイコンをクリックしたときに、安全のため(?)、確認ダイアログを表示することがあります。
以前の書き方は、
<%= link_to l(:button_delete), hello_path, :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del') %>
のように、confirmをキーとするハッシュを引数に指定していました。
Rails 4.1でこのconfirmをキーとしたハッシュは廃止(削除)となっており、代替記述として次のようにdataをキーとしたハッシュでその中にconfirmをキーとしたハッシュを指定します。
<%= link_to l(:button_delete), hello_path, method: :delete, data: {confirm: l(:text_are_you_sure)}, class: 'icon icon-del' %>
ハッシュの書き方は、=> を使う記法と、:を使う記法があり、後者はruby 1.9で導入されたものです。Redmine 2.xはRails 3ベースでruby 1.8をサポートする必要があり、=>を使う記法でした。Redmine 3.xでRails 4.2ベースになった際、Rails 4.2がruby 1.9.3以降のサポートとなったので、Redmine 3.x以降を対象にするならハッシュの書き方に:を使う記法を使用できるようになります。