如何覆盖宝石的常量?(Ruby on Rails)

Pal*_*ini 3 ruby overriding rubygems ruby-on-rails ruby-on-rails-3

我 在我的项目中使用Twitter-text gem,但是我遇到了一些错误.我需要覆盖那个gem的一个常量.

我在StackOverflow上看到一些关于方法覆盖的问题对我有帮助,但我仍然遇到麻烦.我创建了一个名为twitter-text.rbin 的文件/config/initializers/并编写了以下代码:

module Twitter
  class Regex
    HASHTAG_CHARACTERS = "/[[^ ]_#{LATIN_ACCENTS}]/io"
  end
end
Run Code Online (Sandbox Code Playgroud)

(这个正则表达式允许我用除空格之外的任何字符编写Hashtags).

我也试图覆盖一个方法,但它似乎也不起作用.关注我的代码(在同一个文件中):

module Twitter
  module Autolink
    def auto_link_hashtags(text, options = {})  # :yields: hashtag_text
      text = text.downcase
      options = options.dup
      (...)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我刚刚在这个方法中添加了以下行:text = text.downcase.那么,我该怎么做才能覆盖这个方法和属性/常量?

tad*_*man 9

您可以先尝试删除常量,然后重新定义它:

module Twitter
  class Regex
    remove_const(:HASHTAG_CHARACTERS) if (defined?(HASHTAG_CHARACTERS))

    HASHTAG_CHARACTERS = "/[[^ ]_#{LATIN_ACCENTS}]/io"
  end
end
Run Code Online (Sandbox Code Playgroud)

不过,这是一个超级丑陋的monkeypatch领域.