【发布时间】:2015-02-22 20:37:15
【问题描述】:
我正在编写一个“挂钩”到其他宝石上的宝石。它旨在与执行类似操作的多个不同 gem 一起工作,这为可能存在的任何 gem 添加了功能。
我的 gem 在启动时的作用是这样的:
if defined?(GemAModule)
# Hook onto Gem A's observer methods
end
if defined?(GemBModule)
# Hook onto Gem B's observer methods
end
因此,我需要在加载 A 和/或 B 之后运行此代码。但我不能要求 A 或 B。我希望这适用于仅使用 A 或仅 B 的人,因此 A 和 B 不在我的 gem 的依赖项中,它们不能在 require 语句中。
我可以通过使用:MyGem.hook() 方法来做到这一点,用户在初始化 A 或 B 或两者后在其初始化程序中调用该方法。但我试图避免这种情况。我想拥有它,以便添加我的宝石只是“神奇”的工作。
这可能吗?最好的方法是什么?
我能否以某种方式检查“gemfile 中是否有 gem”,在这种情况下需要模块吗?
【问题讨论】:
标签: ruby rubygems require dynamic-loading