通常的做法是将Gem的所有方法扩展到Rails中的应用程序控制器吗?
因为似乎Facebook的宝石不是那样,并且无法确定该方法是来自facebooker gem还是来自我们的内部代码。
因此,当我们需要升级到Facebooker2时,很难找到实际上是Facebooker gem方法的所有方法,因为方法名称没有grep的命名约定。
这是常见做法吗?如果代码总是使用
fbker = Facebooker.new
fbker.do_something
或
Facebooker::clear_fb_cookies
对于相关代码来说,grep会更容易。但是,gem的常见做法是将其所有方法都作为应用程序控制器的一部分吗?
答案 0 :(得分:2)
这不常见,而且称为猴子修补。
首先,您不希望宝石猴子自动修补您的代码。这使得很难预测自己的代码行为。如果你需要像String这样的猴子补丁,那么就应该以不会改变功能的方式进行修改。只添加不会产生冲突或以其他方式阻碍的新内容。
其次,如果要在自己的类或模块中包含方法,则应明确必须包含它们。 E.g:
class MyClass
include Facebook::AwesomeMethods
end
当您查看代码时,知道还包含其他一些方法。