如何重命名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