微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何修补ruby的URI.parse方法

一些流行的博客网站通常在其URL中使用方括号,但 ruby的内置URI.parse()方法会对它们产生阻碍,引发令人讨厌的异常,如下所示:
http://redmine.ruby-lang.org/issues/show/1466

我正在尝试编写一个简单的猴子补丁,它使用方括号优雅地处理URL.以下是我到目前为止的情况:

require 'uri'

module URI

    def self.parse_with_safety(uri)
        safe_uri = uri.replace('[','%5B')
        safe_uri = safe_uri.replace(']','%5D')
        URI.parse_without_safety(safe_uri)
    end

    alias_method_chain :parse,:safety

end

但是在运行时会产生错误

/Library/Ruby/Gems/1.8/gems/activesupport-2.3.8/lib/active_support/core_ext/module/aliasing.rb:33:in alias_method:NameError:模块’URI’的未定义方法’解析’

我怎样才能成功修补URI.parse?

解决方法

alias_method_chain在模块级别执行,因此它只影响实例方法.

要做的是在模块的类级别上执行它:

require 'uri'

module URI
  class << self

    def parse_with_safety(uri)
      parse_without_safety uri.gsub('[','%5B').gsub(']','%5D')
    end

    alias parse_without_safety parse
    alias parse parse_with_safety
  end
end

原文地址:https://www.jb51.cc/ruby/269008.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐