Sha256: 12b8e784e8b88e9237c7c8721885ecd81b7a77051e3f4d3c1ab99706123642e2
Contents?: true
Size: 1.48 KB
Versions: 3
Compression:
Stored size: 1.48 KB
Contents
# frozen_string_literal: true require "forwardable" module HTTPX::Transcoder module JSON module_function JSON_REGEX = %r{\bapplication/(?:vnd\.api\+|hal\+)?json\b}i.freeze class Encoder extend Forwardable def_delegator :@raw, :to_s def_delegator :@raw, :bytesize def_delegator :@raw, :== def initialize(json) @raw = JSON.json_dump(json) @charset = @raw.encoding.name.downcase end def content_type "application/json; charset=#{@charset}" end end def encode(json) Encoder.new(json) end def decode(response) content_type = response.content_type.mime_type raise HTTPX::Error, "invalid json mime type (#{content_type})" unless JSON_REGEX.match?(content_type) method(:json_load) end # rubocop:disable Style/SingleLineMethods if defined?(MultiJson) def json_load(*args); MultiJson.load(*args); end def json_dump(*args); MultiJson.dump(*args); end elsif defined?(Oj) def json_load(response, *args); Oj.load(response.to_s, *args); end def json_dump(*args); Oj.dump(*args); end elsif defined?(Yajl) def json_load(response, *args); Yajl::Parser.new(*args).parse(response.to_s); end def json_dump(*args); Yajl::Encoder.encode(*args); end else require "json" def json_load(*args); ::JSON.parse(*args); end def json_dump(*args); ::JSON.dump(*args); end end # rubocop:enable Style/SingleLineMethods end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
httpx-1.3.4 | lib/httpx/transcoder/json.rb |
httpx-1.3.3 | lib/httpx/transcoder/json.rb |
httpx-1.3.2 | lib/httpx/transcoder/json.rb |