Mudanças recentes no FaradayMiddleware https://github.com/lostisland/faraday_middleware/pull/156/files
torna oj incompatível com ele.
Usamos trilhos, faraday e oj.
Tudo funcionou bem até a mudança mencionada acima.
No momento, recebemos ParsingError com uma mensagem: "options must be a hash".
Esta é a mesma mensagem que você receberá chamando JSON.parse com opções incorretas.
Exemplo:
JSON.parse( { ok: true }.to_json, '')
ArgumentError: options must be a hash.
from (irb):17:in `parse'
Não tenho certeza se é erro Oj ou erro faraday_middleware.
Por enquanto, precisamos remover oj completamente ou usar faraday_middleware na versão anterior.
Como a gem JSON também gera uma exceção, parece que Oj está funcionando conforme o esperado ao imitar a gem JSON. O mesmo comportamento também está presente em um console Rails. A documentação para bot a gem JSON e Rails pede que o segundo argumento, se presente, seja um hash de opções. O faraday_middleware parece ter introduzido um bug.
Olhando para o código do patch, fica claro que eles introduziram um bug, pois o @parse_options terminará de padronizar para nil em vez de {}
.
@ohler55 parece-me que não se comporta da mesma forma que a gem JSON, por exemplo:
irb(main):002:0> JSON.parse('{}', nil)
=> {}
Então, se eu adicionar Oj e tentar a mesma coisa, ele explode:
irb(main):005:0> Oj.mimic_JSON
irb(main):006:0> JSON.parse('{}', nil)
ArgumentError: options must be a hash.
Eu corrigi o faraday_middleware para corrigir o problema por enquanto, mas só queria falar sobre isso aqui, pois parece que o Oj lida com opções nulas de maneira diferente.
Estou corrigido. Para nil, o comportamento é diferente de uma string vazia ou de qualquer string.
irb(main):001:0> JSON.parse('{}', '')
ArgumentError: wrong number of arguments (given 2, expected 1)
from /Users/ohler/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/json-2.1.0/lib/json/common.rb:156:in `initialize'
from /Users/ohler/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/json-2.1.0/lib/json/common.rb:156:in `new'
from /Users/ohler/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/json-2.1.0/lib/json/common.rb:156:in `parse'
from (irb):1
from /Users/ohler/.rbenv/versions/2.4.1/bin/irb:11:in `<main>'
Vou atualizar Oj para caso especial nil. Agradeço por fazer a alteração no faraday_middleware.
Desculpe a confusão sobre a string vazia.
Esqueci que no console do projeto eu já ativei o mimic_JSON.
Obrigado @stefansedich @ohler55 por fazer alterações em suas gems para corrigir o problema.
Obrigado pela sua compreensão, vou criar um link para nosso PR para manter isso rastreado:
https://github.com/lostisland/faraday_middleware/pull/156
Acaba de ser lançado o Oj 3.3.3 que permite que um segundo argumento nulo seja analisado, mas continua a gerar uma exceção em qualquer outra coisa que não seja um Hash.
Acabei de atualizar a versão do gem e todos os testes estão passando.
Muito obrigado.
Podemos encerrar este assunto.
Comentários muito úteis
Estou corrigido. Para nil, o comportamento é diferente de uma string vazia ou de qualquer string.
Vou atualizar Oj para caso especial nil. Agradeço por fazer a alteração no faraday_middleware.