モンキーパッチのやり方
参考:
Rails で利用する gem 達を俺色に染めてやる!- Qiita
アプリケーションにおけるモンキーパッチの当て方 | クックパッド開発者ブログ
gem の内部を書き換える2つの方法 + おまけ (後から明示的に dependent: :destroy を止める方法 Rails3 限定) | MUGENUP 技術ブログ
アプリで利用しているライブラリにモンキーパッチをあてるには? | わからん
Ruby や Rails でメソッドを上書き・処理追加する方法いろいろ | yuhei.kagaya
Gem のメソッドをオーバーライドする方法 | Tak’s Blog
How to Monkey-Patch a core Class in Ruby on Rails | Standard Co
3 ways to monkey-patch without making a mess | Justin Weiss
イニシャライザでモンキーパッチを適用する
参考:
rails でオープンクラスをするときの作法 – Qiita
Where to reopen a class in RoR – Stack Overflow
エンジンにモンキーパッチを適用する
参考:
Rails autoload good practices | Philippe Bourgau’s Blog
開発環境でモンキーパッチをリクエスト毎にリロードさせる
参考:
How to monkey-patch code that gets auto-loaded in Rails? – Stack Overflow
モンキーパッチを自動読み込みさせる
自動読み込みされる場所でパッチ用のモジュールを作成して、モジュール内でモンキーパッチを適用させる。 (例:app/lib/extension_loader.rb )
module ExtensionLoader
module SomeExtension
def patched_method
// implementation of overridden method
end
end
SomeModule.prepend ExtensionLoader::SomeExtension
end
イニシャライザで to_prepare を使って、パッチ用モジュールの定数 ( ExtensionLoader ) を自動読み込みする。(例:config/initializers/extensions.rb )
Rails.application.config.to_prepare do ExtensionLoader end
ExtensionLoader は自動読み込みされているので、開発環境で extension_loader.rb を変更すると自動的に再読み込みされる。require は使わない。
参考:
Rails で Ruby 標準ライブラリを拡張して autoload させる方法と、理想的なディレクトリ構成 – Qiita
リロード時に特定の処理を実行する | Oh My Enter!
Rails で initializers に書いた内容を development モードで再読み込みさせる – Qiita
Watching files during Rails development | Robert Mosolgo
to_prepare – ActiveSupport::Reloader | Ruby on Rails API [Official]
to_prepare – Rails::Railtie::Configuration | Ruby on Rails API [Official]
How to monkey-patch code that gets auto-loaded in Rails? – Stack Overflow
エンジンからメインアプリのコントローラに処理を割り込ませる
参考:
How can I keep my initializer configuration from being lost in development mode? – Stack Overflow
alias_method_chain (DEPRECATED)
alias_method_chain の代わりに prepend と super を使う。
参考:
alias_method_chain と prepend について – Qiita
既存の処理を修正する常套手段 | TECHSCORE BLOG
alias_method_chain と prepend を同時に同じメソッドに適用できない問題 | eagletmt’s blog
特異メソッドの上書きと退避 | TOBY SOFT wiki
Rails 5, Module#prepend, and the end of `alias_method_chain` | Justin Weiss