我正在尝试找到一种方法来覆盖 rails gem 中的变量actionpack/http/parameters.rb
。我必须处理ndjson流,而 rails 中间件无法处理ndjson
。它用ActiveSupport::JSON.decode
这是下面代码的来源
DEFAULT_PARSERS = {
Mime[:json].symbol => -> (raw_post) {
data = ActiveSupport::JSON.decode(raw_post)
data.is_a?(Hash) ? data : { _json: data }
}
}
尝试解析 ndjson 时出现此错误
ActionDispatch::Http::Parameters::ParseError in MyController#activity
我的目标是覆盖解析器以允许它解码 ndjson... 可能使用split(\n)
而不是当前的ActiveSupport::JSON.decode
.
到目前为止,我已经尝试在lib/
文件夹中创建一个文件并使用以下代码,但它似乎没有进行覆盖。我如何在没有猴子补丁的情况下做到这一点
require 'lib/action_dispatch/http/parameters'
module MyParser
module Overrides
extend ActiveSupport::Concern
DEFAULT_PARSERS = {
Mime[:json].symbol => -> (raw_post) {
data = raw_post.split("\n")
data = ActiveSupport::JSON.decode(data)
data.is_a?(Hash) ? data : { _json: data }
}
}
end
end
ActionDispatch::Http::Parameters.include(MyParser::Overrides)
更新:
我尝试的第二种方法:
ActionDispatch::Http::Parameters.const_set(:DEFAULT_PARSERS, {
Mime[:json].symbol => -> (raw_post) {
data = raw_post.split("\n")
data = ActiveSupport::JSON.decode(data)
data.is_a?(Hash) ? data : { _json: data }
},
})
不幸的是,它一直警告我该常量已经定义。