我开始使用Ruby和Rails 3.我想使用Rails引擎(打包为Gem)但它并不像我希望的那样完全正常工作。我想做一些细微的修改,但不想创建自己的分叉版本。我认为这是猴子修补变得有用的地方。
成为Ruby的新手(来自PHP背景)猴子补丁对我来说是一个新概念。我将如何修补猴子修补现有的宝石,我将如何组织我的修改?我正在寻找一些“最佳实践”方法。
答案 0 :(得分:1)
这是一个非常广泛的问题,因为你没有提到什么宝石或你想如何修改行为,但......
一般来说,接近这种方法(解决这个问题的一种方法)就是打开宝石。使用可以打开所有文件的编辑器,以便您可以轻松地从一个文件切换到另一个文件。查看gem时,找出哪个类包含您想要更改的功能。
因此,您转到测试或spec目录并编写如下测试:
# Write tests to your API the way you want to write
# your code, not how you expect you *will* write that
# code.
def test_it_spits_out_my_awesome_error_message
# some setup code
assert_equal my_obj.spit_out_error_message, "some expected error message"
end
并运行测试。当然,他们失败了,因为你的新功能还没有到位。
现在,请说明您的更改位于课程spit_out_error_message
中AwesomeAuthentication
。您可以在项目中创建一个类 - 可能在lib / awesome_auth.rb或类似的东西中。在其中,您按照此处所述进行操作:Rails 3: alias_method_chain still used?。您还需要阅读此内容:http://yehudakatz.com/2009/03/06/alias_method_chain-in-models/,因为它描述了使用此技术修改现有类(滚动到底部)。
所以你创建一个新的spit_out_error_message
,如上所述拼凑它并重新运行测试。