class Seoshop::ResponseParser

Public Instance Methods

call(env) click to toggle source
# File lib/seoshop-api/core/response_parser.rb, line 6
def call(env)
  # "env" contains the request
  @app.call(env).on_complete do
    body = false
    if env[:status] == 200
      body = env[:response].body.response || env[:response].body
    elsif env[:status] == 401
      raise HTTPUnauthorized.new 'invalid Seoshop credentials'
    elsif env[:status] == 403
      raise HTTPForbidden.new env[:response].body.message
    elsif env[:status] == 404
      raise HTTPNotFound.new env[:response].body.message
    elsif env[:status] == 429
      rate_limits = env[:response_headers]['X-RateLimit-Remaining'].split('/')
      rate_limits_reset = env[:response_headers]['X-RateLimit-Reset'].split('/')
      seconds = rate_limits_reset[0] if rate_limits[0] == '-1'
      seconds = rate_limits_reset[1] if rate_limits[1] == '-1'
      seconds = rate_limits_reset[2] if rate_limits[2] == '-1'
      raise RateLimit.new "RateLimit reset in #{seconds} seconds"
    elsif env[:response] && env[:response].body && env[:response].body.status
      body = env[:response].body.status
    end
    env[:body] = body
  end
end