猴子(也许?)在我的Rails应用程序中修补宝石

时间:2011-07-12 17:00:44

标签: ruby-on-rails ruby gem patch

我对这个术语100%肯定,对于rails世界来说仍然相对较新,所以请原谅,如果我与猴子补丁相距太远,那么在这种情况下可能不适用。

我正在使用一个延长缩短网址的宝石LongURL。默认情况下,gem使用longurl.org,但我们每天推送几十万个网址,并认为每个人都可以在内部提供该服务。我只需要更改2个常量来指向我自己的url。

module LongURL
  ShortURLMatchRegexp = /http:\/\/[\/\-_.a-z0-9]+/im

  # Urls for longurl
  EndPoint        = URI.parse("http://api.longurl.org/v1/expand")
  ServiceEndPoint = URI.parse("http://api.longurl.org/v1/services")
end

看起来似乎没有这么小的改变值得分叉,什么是好的,轨道惯用的?,做这样的小改动的方法?

由于

1 个答案:

答案 0 :(得分:6)

当您重新定义常量时,您需要先删除旧的常量,然后重新应用新的常量。您的补丁可能如下所示:

module LongURL
  remove_const(:ShortURLMatchRegexp)
  ShortURLMatchRegexp = /http:\/\/[\/\-_.a-z0-9]+/im

  # ... (etc) ...
end

这应该有助于避免重新定义现有const的警告。

就Railsy而言,将其放入config/initializers并确保其标记清楚,或许longurl_monkeypatch.rb所以对于什么样的hackery没有混淆。