0

我想替换我正在使用的 gem 中的特定 ruby​​ 文件。

我正在使用的 gem 是 private_pub:https ://github.com/ryanb/private_pub我要替换的文件是:https ://github.com/ryanb/private_pub/blob/master/lib/private_pub/faye_extension .rb

所以我决定做的是,在我的 rails 项目中,在 config/initializers 中添加一个名为 faye_extension.rb 的新文件,其中包含以下代码:

PrivatePub::FayeExtension
puts "Overide loaded"
module PrivatePub
  # This class is an extension for the Faye::RackAdapter.
  # It is used inside of PrivatePub.faye_app.
  class FayeExtension
    # Callback to handle incoming Faye messages. This authenticates both
    # subscribe and publish calls.
    def incoming(message, callback)
    puts "MY MEGA CHANGE"
    logger.debug "inside incoming override"
      if message["channel"] == "/meta/subscribe"
           puts "subscription request received"
        authenticate_subscribe(message)
      elsif message["channel"] !~ %r{^/meta/}
        puts "publish request received"
        authenticate_publish(message)
      end
      callback.call(message)
    end

  private

    # Ensure the subscription signature is correct and that it has not expired.
    def authenticate_subscribe(message)
      subscription = PrivatePub.subscription(:channel => message["subscription"], :timestamp => message["ext"]["private_pub_timestamp"])
      if message["ext"]["private_pub_signature"] != subscription[:signature]
        message["error"] = "Incorrect signature."
      elsif PrivatePub.signature_expired? message["ext"]["private_pub_timestamp"].to_i
        message["error"] = "Signature has expired."
      end
    end

    # Ensures the secret token is correct before publishing.
    def authenticate_publish(message)
      if PrivatePub.config[:secret_token].nil?
        raise Error, "No secret_token config set, ensure private_pub.yml is loaded properly."
      elsif message["ext"]["private_pub_token"] != PrivatePub.config[:secret_token]
        message["error"] = "Incorrect token."
      else
        message["ext"]["private_pub_token"] = nil
      end
    end
  end
end

我在顶部包含“PrivatePub::FayeExtension”的原因是强制自动加载,以便 FayeExtension 类将覆盖 gem 的实现。然而,当我执行驱动这个逻辑的代码路径时,我添加的 puts 语句都没有显示在日志中。值得一提的是,我确实看到了“Overide loaded”,但我相信会发生这种情况,然后,不知何故,gem 的实现被使用了。这让我相信 gem 的 faye_extension.rb 正在使用而不是我的版本。

如何强制使用我的版本而不是 gem 的版本?

4

0 回答 0