ruby oj gem :: режим compat игнорирует to_hash - PullRequest
0 голосов
/ 13 октября 2019

У меня проблемы с настройкой режима: compat, как и ожидалось, с "oj". Кажется, он игнорирует метод to_hash. У меня есть простой пример (который я основал на этом посте: объекты Ruby и сериализация JSON (без Rails) ), который демонстрирует то, что я вижу.

Как вы можете видеть (извыводится в комментариях), хеш @guts, возвращаемый 'to_hash', не используется oj, когда используется ': mode =>: compat'. Кажется, я что-то упустил, или есть какая-то версия или проблема конфигурации. Спасибо!

(версия oj:

$ gem list|grep oj
oj (3.9.2)

Если это имеет значение, это на Fedora 30.)

require 'oj'

class A

  public

  def a
    @guts[:a]
  end

  def b
    @guts[:b]
  end

  def to_hash
puts "tohash"
    @guts
  end

  def initialize(a:, b:)
    @guts = {:a => a, :b => b}
  end
end

a = A.new(a: "x", b: nil)
puts Oj::dump a, :indent => 2
=begin
# output:
{
  "^o":"A",
  "guts":{
    ":a":"x",
    ":b":null
  }
}
=end

# (As an experiment I tried both with and without this line - same result:)
Oj.default_options = {:mode => :compat}
puts Oj::dump a, :indent => 2, :mode => :compat
=begin
# output:
"#<A:0x00000000021a6f10>"
=end
puts Oj::dump a, :indent => 2, :mode => :compat, use_to_hash: true
=begin
# output:
"#<A:0x00000000021a6f10>"
=end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...