Oj: Compatibilidade mimic_JSON com Faraday

Criado em 31 jul. 2017  ·  7Comentários  ·  Fonte: ohler55/oj

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.

Comentários muito úteis

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.

Todos 7 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

swiknaba picture swiknaba  ·  9Comentários

dpaluy picture dpaluy  ·  55Comentários

gerrywastaken picture gerrywastaken  ·  36Comentários

kmasuda-aiming picture kmasuda-aiming  ·  8Comentários

skliew picture skliew  ·  6Comentários