instapaper/lib/faraday/response/parse_json.rb
2015-02-10 00:39:54 -05:00

31 lines
747 B
Ruby

require 'faraday'
require 'json'
module Instapaper
module API
module Response
class ParseJson < Faraday::Response::Middleware
WHITESPACE_REGEX = /\A^\s*$\z/
def parse(body)
case body
when WHITESPACE_REGEX, nil
nil
else
JSON.parse(body, symbolize_names: true)
end
end
def on_complete(response)
response.body = parse(response.body) if respond_to?(:parse) && !unparsable_status_codes.include?(response.status)
end
def unparsable_status_codes
[204, 301, 302, 304]
end
end
end
end
end
Faraday::Response.register_middleware instapaper_parse_json: Instapaper::API::Response::ParseJson