モンキーパッチのやり方
参考:
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