【发布时间】:2013-09-22 09:47:22
【问题描述】:
我创建了一个 gem,它本质上是现有 Ruby 应用程序的插件/扩展。该应用程序使用捆绑器对此进行了一些考虑;启动时会自动执行Bundle.require :misc。
我已将我的 Gem 添加到 Gemfile 中的 :misc 组中,并且我的 gem 正在按预期添加到加载路径中。挑战在于,为了让我的扩展正常工作,我需要修补一些现有的类。
我所有的猴子补丁代码都包含在 gem 的一个 ruby 文件中(比如说lib/mygem/patch.rb)。如果我在Bundle.require :misc 的现有行之后手动编辑基本应用程序的源以调用require 'mygem/patch',那么一切都很好。然而,这是草率的,并且每次我重新安装 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 中的猴子修补问题?
谢谢!
【问题讨论】:
标签: ruby plugins rubygems gem monkeypatching