なるほど。
class Foo module M end def foo class << self puts "*** #{M}" prepend M end end end class Bar < Foo module M end def foo class << self puts "*** #{M}" prepend M end end end Foo.new.foo # => "*** Foo::M" Bar.new.foo # => "*** Bar::M"
なるほど。
class Foo module M end def foo class << self puts "*** #{M}" prepend M end end end class Bar < Foo module M end def foo class << self puts "*** #{M}" prepend M end end end Foo.new.foo # => "*** Foo::M" Bar.new.foo # => "*** Bar::M"
疲れが溜まっていたため1回休み。
昨日の esm LT #3 で話したタイトルが『Love your neighbour Gems』だった。スライドは未公開。
開発者が近所にいる Gem を使うことのメリットについて話した後に、具体的ないくつかのご近所さんが関わっている Gem について紹介していた。
少し異色なところとして、ひとつだけ Forked Gem として取り挙げた nsgc/compass を記しておく。
nsgc/compass とは、compass に対して警告を消した PR が出ているが長いことマージされていないため誕生したもの。以下のように Gemfile に指定して使うことで警告が消えるので、同じ悩みを持っているようであれば検討すると良いと思う。
'compass', github: 'nsgc/compass', branch: 'fix_deprecation_warning'
秋吉の焼き鳥をつまみつつの社内 LT 大会、muryoimpl プロデュースのその第3回だった。
個人的には新卒氏ズのひとりの LT が、OJT 配属前の研修期間でどんな言葉が響いて、どのようなアクションを起こして、どう感じてきたかという話を聞けたのがすごく良かった。
新卒氏ズのひとりのタイトルいい話の予感しかない! #esm_lt pic.twitter.com/nAhOuX8LVs
— Koichi ITO (@koic) 2017年6月9日
この発表で特に印象深かったフレーズを挙げる。
OSS (Rails) パッチ会で隣席のコミッターにマージしてもらう経験の次に、OSS Gate で遠くの人に Pull Request を送っておマージしてもらうという経験をした。
これは OSS への距離感を詰めるひとつのいい Kata になりそうだった。
Rails 5 で ActionController::Parameters が Hash (ActiveSupport::HashWithIndifferentAccess) を継承しなくなったことで作った Gem となる。
Rails 4 系から Rails 5 系にアップグレードしたアプリケーションで、AC::Parameters に対して Hash のメソッド呼び出しをしているコードが残っている可能性がある場合を想定している。
自動テスト、手動テストなどで見つかったものは良いが、本番環境まで見逃してエラーが発生するとたいへん悲しい気持ちになる。そこでこの Gem では従来のように Hash のメソッド呼び出しがあった場合には、その処理を続行しつつエラーログを出力するようになる。アプリケーションとしてエラーになることなくなるので、裏でログ検知の仕組みを入れて未対応分のコードを直す土台にするといった使われ方を想定している。
Rails プラギンとしていて Gemfile に gem "everlasting"
として bundle install
すれば、いまのところ特に設定は不要。ログは error レベルで出すようにしている。
裏側の実装としては、AC::Parameters に method_missing
を定義して、Hash が respond_to?
で対応できるメソッドの呼び出しであれば to_h
して send
とロギングをするといったシンプルなものになる。
本質的には望んで使いたい Gem ではないので、一定期間の導入で問題となるログがなければ外すと良い。
Gem の名前は当初 hashnize_parameters などといった名前を考えていたりして悩んでいたが、ちょうどオフィスに向かう電車で聴いていた楽曲の曲名が『EVERLASTING』だったのでそこから拝借したのと、エラーで終わるなることなく続いていくということから命名した。Gem 名はモジュールの名前空間になったりするのでワンワードが好ましいと思っていることも決定の理由だけれど、名付け難しい。