我正在写一个“挂钩”到其他宝石上的宝石。它设计用于处理类似事情的多个不同的宝石,这会将功能添加到可能存在的任何宝石中。如何编写需要在加载一些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中”,在这种情况下需要模块吗?