如何重命名Ruby库模块的命名空间?
我想在Rails应用程序中使用ruby Stripe库 。 它使用模块Stripe
作为其命名空间。
我想使用Stripe
作为我的ActiveRecord模型的命名空间,并将库模块重命名为StripeApi,以便例如StripeApi::Charge
引用Stripe库,但Stripe::Charge
引用我的Stripe
-namespaced ActiveRecord模型(因此,例如Stripe::Charge.create(...)
创建数据库记录,而不是仅仅进行API调用。
有没有一个很好的方法来做到这一点?
(当然,我可以重命名我的命名空间,或尝试使用不同命名的模型,但我觉得有点难看。)
我真的建议您重命名自己的命名空间,因为您可以完全控制代码。 否则,如果您想要更新Stripe gem的版本或搜索与您的命名空间相关的Bug以及原始Stripe命名空间,那么它真的会变得很麻烦。
更改自己的命名空间而不是更改现有的gem(最终再次针对每个版本)要容易得多。
Ruby中没有“namespace”这样的东西。 它只是一个变量(好,常数):
StripeApi = Stripe
繁荣。 你完成了。
确保将Stripe
设置为新模块,以便在您认为创建新模块时不会意外重新打开模块:
Stripe = Module.new
现在你可以做到
class Stripe::Charge; end