2013/12/29
今開いているファイルの *** をレジスタに
クリップボードと連携しておけば、さらに捗る。

2013/12/08
Redmineのプラグインで既存の文言を上書きする
この情報は Redmine 2.5 で不要になりました。→ tail -f pinzo.log: Redmine 2.5.0 からプラグインでの文言上書きが復活しています
Redmine のプラグインで本体の文言を上書きすることが出来ません。
昔はできたようなのですが、バージョンが違うのか I18n の仕様が変わったのか現在は出来ません。
ja:
project_module_documents: ドキュメント
project_module_calendar: 日程表
プラグインの ja.yml
にこんな記述をしても画面はかわりません。
通常、プラグインをロードすると、I18n.load_path
はこんな状態になります。
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml
rails/railties/lib/rails/engine.rb at 3-2-stable · rails/rails にあるように、I18n.load_path
の後ろのほうが優先度が高いので、本体の言語ファイルのほうが優先されてしまいプラグイン側で上書きすることができません。
プラグインの登録は config/initializers/30-redmine.rb
で行われていて、その際にプラグインの辞書ファイルが I18n.load_path
に登録されるのですが、この時点ではアプリケーション本来の辞書ファイルが登録されていないからでしょう。
じゃあどうすればいいのかというと、どこかで I18n.load_path
を調整して、プラグインの辞書ファイルを後ろの方にもっていくのがいいのかなと。
確実に行うなら、初期化完了時がよさげですね。
Rails::Engine
には after_initialize
という目的そのままの機能があるのでこれが使えそうです。
こんなコードを lib
あたりに突っ込んでおいて、init.rb
で require
すればOK。
I18n.load_path
はこんな感じになります。
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml
2013/12/07
Railsのログに出力されるパラメータとSQLを整形するgemを作った
最初に
この記事は Ruby on Rails Advent Calendar 2013 - Qiita [キータ] の7日目の記事です。
前日は a_suenami さんの Railsでサービスとフォームを導入してみる話 - assertInstanceOf('Engineer', $a_suenami) です。
本題
こういう gem を作りました。
pinzolo/rails-flog - Github
rails-flog - RubyGems.org
Gemfile に下記を追加して bundle install
するだけで、ログに出力されるパラメータとSQLが整形して出力されるようになります。
gem 'rails-flog', :require => 'flog'
Redmine でのスクリーンショットはこんな感じ。
使用前

使用後

Railsアプリケーションに tmp/no-flog.txt
を配置すれば一時的に整形をやめることもできます。
残念なところ
作った経緯
- 先日、西脇.rb & 東灘.rb 合同もくもく会 7th - 西脇.rb & 東灘.rb に参加した時に、@jnchito さんが、色々と awesome_print で出力するWebサービスを作成されてて、その際にログに出力される複雑なパラメータを手作業で整形するのがタルいみたいな事をおっしゃってまして、「あるある」と思っていた。
- んで、複雑なSQLもタルいよなー、整形してログに出力させるぐらいならできんじゃね?
- anbt-sql-formatter てのがあるじゃない。イケそう。
- 誰か作ってんじゃない?と調べてみると Railsのログに出力されるパラメータやSQLを整形する - ( ꒪⌓꒪) ゆるよろ日記 というそのものなものが見つかる。しかも自分でブクマ済み。
- もう少し調べてみるとどうやら同等の機能をもつ gem は存在していないみたい。
- 作ってみるか。
思うところ
我々エンジニアは誰しも素晴らしいプロダクトやサービスを作りたいと思っていると思います。
そして多くの人が時間、技術力、アイデア、ビジョン等々の不足であきらめているのでしょう。
でもエンジニアの本質は「素晴らしい物を生み出す」よりも、「一歩進める」ことだと思っています。
ひとが考えもしない方向へ一歩進められたり、一歩がとっても大きい人が素晴らしいプロダクトやサービスを生み出せるのでしょう。
出来なかったことをできるようにしたり、自動化したり、簡略化したり、みんな一歩進めた結果です。
rails-flog
も、アイデアも実装手段も他の巨人に乗っかったものですが、gemにするという一歩だけ進めることが出来ました。
一歩進めるだけなら誰にでもできるでしょう、さああなたも身近なものを一歩進めてみてください。
Next
明日は znz さんです。