Sha256: e61513924888ee1fa278974a304fb549f0f31c82936388294488296a660bdcd4

Contents?: true

Size: 1.16 KB

Versions: 16

Compression:

Stored size: 1.16 KB

Contents

module Quandl
module Client
module Middleware

class ParseJSON < Faraday::Response::Middleware

  def on_complete(env)
    env[:body] = case env[:status]
    when 204
      parse('{}', env)
    else
      parse(env[:body], env)
    end
  end

  def parse(body, env)
    json = parse_json(body)
    errors = json.delete(:errors) || {}
    metadata = json.delete(:metadata) || {}
    # collect some response data
    metadata.merge!({
      status:                 env[:status],
      headers:                env[:response_headers],
      })
    # return object
    object = {
      :data => json,
      :errors => errors,
      :metadata => metadata
    }
    env[:status] = 200
    object
  end

  def parse_json(body = nil)
    body ||= '{}'
    message = "Response from the API must behave like a Hash or an Array (last JSON response was #{body.inspect})"

    json = begin
      Yajl.load(body, :symbolize_keys => true)
    rescue Yajl::ParseError
      { id: 1, errors: { parse_error: message } }
      
      # raise Her::Errors::ParseError, message
    end
    # raise Her::Errors::ParseError, message unless json.is_a?(Hash) or json.is_a?(Array)

    json
  end

end

end
end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
quandl_client-0.1.14 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.13 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.12 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.11 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.10 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.9 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.8 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.7 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.6 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.5 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.4 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.3 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.2 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.1.0 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.0.16 lib/quandl/client/middleware/parse_json.rb
quandl_client-0.0.15 lib/quandl/client/middleware/parse_json.rb