class BitgoClient::Client
Constants
- SENSITIVE_KEYS
Attributes
access_token[R]
Public Class Methods
new(access_token)
click to toggle source
# File lib/bitgo_client/client.rb, line 26 def initialize(access_token) @access_token = access_token end
Public Instance Methods
request(url, payload = nil, method: :get, logger: nil)
click to toggle source
# File lib/bitgo_client/client.rb, line 30 def request(url, payload = nil, method: :get, logger: nil) body = payload.to_json if payload log logger, "Request url: #{url}, method: #{method}, body:" log logger, payload request = Typhoeus::Request.new( url, method: method, headers: { "Authorization" => "Bearer #{access_token}", "Content-Type" => "application/json" }, body: body ) request.run response = request.response code = response.code body = response.body log logger, "Response code: '#{code}', body: '#{body}'" if [408, 504, 524].include?(code) raise BitgoClient::Errors::RequestError.new("[BitGo API Error] Timeout (code: #{code}).", response) elsif response.failure? raise BitgoClient::Errors::RequestError.new("[BitGo API Error] code: #{code}.", response) elsif body.nil? || body == "" {} elsif valid_json?(body) JSON.parse(body) else raise BitgoClient::Errors::RequestError.new("[BitGo API Error] Invalid JSON (code: #{code}).", response) end end
Private Instance Methods
log(logger, message)
click to toggle source
# File lib/bitgo_client/client.rb, line 70 def log(logger, message) return if logger.nil? if message.is_a?(Hash) SENSITIVE_KEYS.each { |key| message[key] = "[FILTERED]" if message.key?(key) } message = message.to_json end tag = "#{self.class}/request" if logger.respond_to?(:tagged) logger.tagged(tag) { logger.debug(message) } else logger.debug(tag) { message } end end
valid_json?(json)
click to toggle source
# File lib/bitgo_client/client.rb, line 87 def valid_json?(json) JSON.parse(json) return true rescue JSON::ParserError => e return false end