ruby-on-rails - 如何覆盖 gem 的常量? (Rails 上的 ruby )

标签 ruby-on-rails ruby ruby-on-rails-3 rubygems overriding

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

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

module Twitter
  class Regex
    HASHTAG_CHARACTERS = "/[[^ ]_#{LATIN_ACCENTS}]/io"
  end
end

(这个正则表达式允许我用除空格以外的任何字符编写标签)。

我也在尝试重写一个方法,但它似乎也不起作用。按照我的代码(在同一个文件上):

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

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

最佳答案

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

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

    HASHTAG_CHARACTERS = "/[[^ ]_#{LATIN_ACCENTS}]/io"
  end
end

这个 super 丑monkeypatch领土,虽然。

关于ruby-on-rails - 如何覆盖 gem 的常量? (Rails 上的 ruby ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067263/

相关文章:

ruby-on-rails-3 - 谷歌浏览器强制使用 HTTPS

ruby-on-rails - Rails 3数据库索引和其他优化

ruby-on-rails - 如何使用 rspec 测试路由约束

ruby-on-rails - 如何将变量分配给 activerecord 对象?

ruby-on-rails - 测试目录与 Rspec 一起存在

ruby-on-rails - 使用 rails 显示来自数据库的信息不起作用

ruby-on-rails - 从 google-api-client 获取基本的个人资料信息

ruby-on-rails - 什么是最好用的 - ruby​​ gems 或 ruby​​ 插件

ruby-on-rails - 将 Rails 日期时间转换为 YYYY-MM-DDThh :mm:ssZ

ruby-on-rails - Rails 3路线将_index附加到路线名称