モンキーパッチのやり方

参考:

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

Tagged:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です