class OmniAuth::EbayOauth::UserInfoRequest

Receives user information from Auth'n'auth eBay API developer.ebay.com/devzone/xml/docs/reference/ebay/GetUser.html

Constants

BASIC_HEADERS
ERRORS
STATUS_PATH
SUCCESS_CODE
TOKEN_HEADER
USER_REQUEST

Public Class Methods

new(access_token, request: USER_REQUEST, user_info_endpoint:, read_timeout:, **_args) click to toggle source
# File lib/omniauth/ebay-oauth/user_info_request.rb, line 26
def initialize(access_token, request: USER_REQUEST,
               user_info_endpoint:, read_timeout:, **_args)
  @access_token = access_token
  @url = URI(user_info_endpoint)
  @read_timeout = read_timeout
  @request = request
end

Public Instance Methods

call() click to toggle source
# File lib/omniauth/ebay-oauth/user_info_request.rb, line 34
def call
  MultiXml.parse(
    http
      .request(ebay_request)
      .tap(&method(:ensure_success_code))
      .read_body
  ).tap(&method(:ensure_success_result))
end

Private Instance Methods

ebay_request() click to toggle source
# File lib/omniauth/ebay-oauth/user_info_request.rb, line 69
def ebay_request
  Net::HTTP::Post.new(@url).tap do |request|
    BASIC_HEADERS.merge(TOKEN_HEADER => @access_token)
                 .each { |header, value| request[header] = value }
    request.body = @request
  end
end
ensure_success_code(response) click to toggle source
# File lib/omniauth/ebay-oauth/user_info_request.rb, line 45
def ensure_success_code(response)
  return if (200..299).cover?(response.code.to_i)

  raise FailureResponseCode, response
end
ensure_success_result(body) click to toggle source
# File lib/omniauth/ebay-oauth/user_info_request.rb, line 51
def ensure_success_result(body)
  return if body.dig(*STATUS_PATH) == SUCCESS_CODE

  error_code = body.dig('GetUserResponse', 'Errors', 'ErrorCode')
  raise(FailureResponseResult, body) unless ERRORS.key?(error_code)

  err_class = ERRORS[error_code]
  err_message = body.dig('GetUserResponse', 'Errors', 'LongMessage')
  raise err_class, err_message
end
http() click to toggle source
# File lib/omniauth/ebay-oauth/user_info_request.rb, line 62
def http
  Net::HTTP.new(@url.host, @url.port).tap do |http|
    http.read_timeout = @read_timeout
    http.use_ssl = true
  end
end