如何正确地monkeypatch Ruby?

时间:2011-05-10 19:50:52

标签: ruby ruby-on-rails-3 monkeypatching

我正在尝试在标准库中对Net类中的一行进行monkeypatch。我在项目的lib文件夹中创建了一个名为patches.rb的文件,并添加了这个

module Net
  class HTTP < Protocol
    module HTTPHeader
      def initialize_http_header(initheader)
        @header = {}
        return unless initheader
        initheader.each do |key, value|
          @header[key.downcase] = [value.strip] rescue ""
        end
      end
    end
  end
end

但它不起作用。我这样做了吗? (这与继承层次结构完全相同。)

编辑:部分问题是我必须将文件放在initalizers文件夹中。但仍然看到同样的错误。

1 个答案:

答案 0 :(得分:10)

由于lib/目录中的内容只是按需加载,因此在config/initializers/中将这些补丁放到堆栈初始化后自动加载后,可能会更成功。

您还可以将扩展名的定义折叠为以下内容:

module Net::HTTP::HTTPHeader
  # ... (redefined methods) ...
end