Sha256: 7d692fdf00c4ad15078c23270fcb155a13f18bb37f6c3322545c64ca6b71bad3

Contents?: true

Size: 1.42 KB

Versions: 13

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

require 'json'

module Faraday
  class Response
    # Parse response bodies as JSON.
    class Json < Middleware
      def initialize(app = nil, options = {})
        super(app)
        @parser_options = options[:parser_options]
        @content_types = Array(options[:content_type] || /\bjson$/)
        @preserve_raw = options[:preserve_raw]
      end

      def on_complete(env)
        process_response(env) if parse_response?(env)
      end

      private

      def process_response(env)
        env[:raw_body] = env[:body] if @preserve_raw
        env[:body] = parse(env[:body])
      rescue StandardError, SyntaxError => e
        raise Faraday::ParsingError.new(e, env[:response])
      end

      def parse(body)
        ::JSON.parse(body, @parser_options || {}) unless body.strip.empty?
      end

      def parse_response?(env)
        process_response_type?(env) &&
          env[:body].respond_to?(:to_str)
      end

      def process_response_type?(env)
        type = response_type(env)
        @content_types.empty? || @content_types.any? do |pattern|
          pattern.is_a?(Regexp) ? type.match?(pattern) : type == pattern
        end
      end

      def response_type(env)
        type = env[:response_headers][CONTENT_TYPE].to_s
        type = type.split(';', 2).first if type.index(';')
        type
      end
    end
  end
end

Faraday::Response.register_middleware(json: Faraday::Response::Json)

Version data entries

13 entries across 13 versions & 6 rubygems

Version Path
avalara_sdk-24.12.2 vendor/bundle/ruby/2.7.0/gems/faraday-1.10.4/lib/faraday/response/json.rb
avalara_sdk-24.12.1 vendor/bundle/ruby/2.7.0/gems/faraday-1.10.4/lib/faraday/response/json.rb
avalara_sdk-24.12.0 vendor/bundle/ruby/2.7.0/gems/faraday-1.10.4/lib/faraday/response/json.rb
minato_ruby_api_client-0.2.2 vendor/bundle/ruby/3.2.0/gems/faraday-1.10.3/lib/faraday/response/json.rb
faraday-1.10.4 lib/faraday/response/json.rb
avalara_sdk-24.2.29 vendor/bundle/ruby/2.7.0/gems/faraday-1.10.3/lib/faraday/response/json.rb
faraday-1.10.3 lib/faraday/response/json.rb
faraday-1.10.2 lib/faraday/response/json.rb
faraday-1.10.1 lib/faraday/response/json.rb
op_connect-0.1.2 vendor/bundle/ruby/3.1.0/gems/faraday-1.10.0/lib/faraday/response/json.rb
plaid-14.13.0 vendor/bundle/ruby/3.0.0/gems/faraday-1.10.0/lib/faraday/response/json.rb
tdiary-5.2.1 vendor/bundle/ruby/3.1.0/gems/faraday-1.10.0/lib/faraday/response/json.rb
faraday-1.10.0 lib/faraday/response/json.rb