class FaradayMiddleware::Jsons::Decoder

Public Class Methods

new(app, options = {}) click to toggle source
Calls superclass method
# File lib/faraday_middleware/jsons/response/decoder.rb, line 3
def initialize(app, options = {})
  super(app)

  @raise_error    = options[:raise_error]    || false
  @symbolize_keys = options[:symbolize_keys] || false
  @content_type   = options[:content_type]   || %r!^application/(.*\+)?json!
end

Public Instance Methods

call(env) click to toggle source
# File lib/faraday_middleware/jsons/response/decoder.rb, line 11
def call(env)
  @app.call(env).on_complete do |env|
    if has_body?(env) && match_content_type?(env)
      env[:body] = parse(env[:body])
    end
  end
end
parse(body) click to toggle source
# File lib/faraday_middleware/jsons/response/decoder.rb, line 19
def parse(body)
  begin
    ::MultiJson.load(body, symbolize_keys: @symbolize_keys)
  rescue => e
    raise e if @raise_error
    body
  end
end

Protected Instance Methods

has_body?(env) click to toggle source
# File lib/faraday_middleware/jsons/response/decoder.rb, line 34
def has_body?(env)
  (body = env[:body]) && !body.empty?
end
match_content_type?(env) click to toggle source
# File lib/faraday_middleware/jsons/response/decoder.rb, line 29
def match_content_type?(env)
  content_type = env[:response_headers]["Content-Type"]
  @content_type === content_type
end