3

我开始使用 Ruby 和 Rails 3。我想使用一个 Rails 引擎(打包为 Gem),但它并不能完全按照我的意愿工作。我想进行一些细微的修改,但不想创建自己的分叉版本。我认为这是猴子修补变得有用的地方。

作为 Ruby 新手(并且来自 PHP 背景)猴子补丁对我来说是一个新概念。我将如何着手修补现有的 gem,我将如何组织我的修改?我正在寻找一些“最佳实践”方法。

4

1 回答 1

1

这是一个非常广泛的问题,因为您没有提到什么宝石或您想如何修改行为,但是......

一般来说,解决这个问题的方法(解决这个问题的一种方法)是打开宝石。使用可以打开所有文件的编辑器,这样您就可以轻松地从一个文件切换到另一个文件。查看 gem 时,找出哪个类包含您要更改的功能。

因此,您进入您的测试或规范目录并编写如下测试:

# 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:a​​lias_method_chain 仍在使用吗?. 您还需要阅读以下内容:http: //yehudakatz.com/2009/03/06/alias_method_chain-in-models/,因为它描述了使用这种技术修改现有类(滚动到底部)。

因此,您创建一个新spit_out_error_message的,按照上述方法将其拼凑起来,然后重新运行测试。

于 2011-04-09T22:40:06.617 回答