我创建了一个 gem,它本质上是现有 Ruby 应用程序的插件/扩展。该应用程序使用捆绑器对此进行了一些考虑;Bundle.require :misc
它在启动时自动执行。
我已将我的 Gem 添加到 中的:misc
组中,Gemfile
并且我的 gem 正在按预期添加到加载路径中。挑战在于,为了让我的扩展能够正常工作,我需要修补一些现有的类。
我所有的猴子补丁代码都包含在 gem 的一个 ruby 文件中(比方说lib/mygem/patch.rb
)。如果我手动编辑基础应用程序的源代码以require 'mygem/patch'
在现有行之后调用,Bundle.require :misc
那么一切正常。然而,这是草率的,并且每次我重新安装 gem 或移动到新机器时都需要为基本应用程序编辑已安装的 gem。
# Currently I can load my gem and execute the monkey patch in 2 lines
gem 'mygem'
require 'mygem/patch'
# Or with bundler (mygem is in the :misc group)
Bundle.require :misc
require 'mygem/patch'
# I want to achieve the same result in only one line
gem 'mygem'
# or
Bundle.require :misc
每当从基本应用程序激活扩展 gem 时,我想从内部自动运行一些代码,而不必手动要求该文件。该解决方案既可以在使用gem 'mygem'
语句单独激活 gem 时工作,也可以作为捆绑组的一部分(如Bundle.require :misc
.
这可能吗?是否有更好的模式来解决“插件/扩展”gem 中的猴子修补问题?
谢谢!