class MyTargetApi::Request

Requests

Attributes

logger[R]

Public Class Methods

new(logger: NilLogger) click to toggle source
# File lib/my_target_api/request.rb, line 12
def initialize(logger: NilLogger)
  @logger = logger
end

Public Instance Methods

delete(url, params = {}, headers = {}) click to toggle source
# File lib/my_target_api/request.rb, line 32
def delete(url, params = {}, headers = {})
  response = with_exception_handling('DELETE', url, params) do
    NetClient.delete(url, headers.merge(query(params)))
  end

  process_response(response)
end
get(url, params = {}, headers = {}) click to toggle source
# File lib/my_target_api/request.rb, line 16
def get(url, params = {}, headers = {})
  response = with_exception_handling('GET', url, params) do
    NetClient.get(url, headers.merge(query(params)))
  end

  process_response(response)
end
post(url, params = {}, headers = {}) click to toggle source
# File lib/my_target_api/request.rb, line 24
def post(url, params = {}, headers = {})
  response = with_exception_handling('POST', url, params) do
    NetClient.post(url, params, headers)
  end

  process_response(response)
end
upload(url, content, params = {}, headers = {}) click to toggle source
# File lib/my_target_api/request.rb, line 40
def upload(url, content, params = {}, headers = {})
  response = with_exception_handling('POST', url, params, content: content) do
    NetClient.post(
      url,
      content,
      { 'Content-Type' => 'application/octet-stream' }
        .merge(headers)
        .merge(query(params))
    )
  end

  process_response(response)
end

Private Instance Methods

log_response(response) click to toggle source
# File lib/my_target_api/request.rb, line 83
def log_response(response)
  logger << ResponseFormatter.new(response).format
end
process_response(response) click to toggle source
# File lib/my_target_api/request.rb, line 62
def process_response(response)
  JSON.parse(response.body)
rescue JSON::ParserError
  response.body
end
query(params) click to toggle source
# File lib/my_target_api/request.rb, line 58
def query(params)
  { params: params }
end
raise_with_params(method:, url:, params:, response: nil, content:, original_exception: nil) click to toggle source
# File lib/my_target_api/request.rb, line 87
def raise_with_params(method:, url:, params:, response: nil, content:, original_exception: nil)
  result = MyTargetApi::RequestError.new(original_exception: original_exception)
  result.set_request_info(method: method, url: url, request_body: content, params: params)
  result.set_response_info(response: response)
  result.set_backtrace(caller)
  raise result
end
with_exception_handling(method, url, params, content: nil) { || ... } click to toggle source
# File lib/my_target_api/request.rb, line 68
def with_exception_handling(method, url, params, content: nil)
  response = yield
  log_response(response)
  if response.code >= 400
    raise_with_params(method: method, url: url, params: params, response: response,
                      content: content)
  end
  response
rescue NetClient::Exception => e
  original_exception = e.original_exception
  logger << "#{original_exception.class.name} #{original_exception.message}"
  raise_with_params(method: method, url: url, params: params, content: content,
                    original_exception: original_exception)
end