class CoinMarketPro::Client::Base
Constants
- API_DOMAIN
- API_URL
- API_VERSION
- DEFAULT_TIMEOUT
- PRO_SUBDOMAIN
- SANDBOX_SUBDOMAIN
Attributes
api_key[R]
cryptocurrency[R]
exchange[R]
global_metrics[R]
host[R]
logger[R]
sandbox[R]
tools[R]
Public Class Methods
new(api_key: ENV.fetch('CMC_PRO_API_KEY'), sandbox: false, logger: Logger.new(STDOUT), timeout: DEFAULT_TIMEOUT)
click to toggle source
@param api_key
[String] Required. Defaults to CMC_PRO_API_KEY @param sandbox [Boolean] Defaults to false @param logger [Logger] @param timeout [Integer] Defaults to DEFAULT_TIMEOUT
# File lib/coin_market_pro/client/base.rb, line 36 def initialize(api_key: ENV.fetch('CMC_PRO_API_KEY'), sandbox: false, logger: Logger.new(STDOUT), timeout: DEFAULT_TIMEOUT) @sandbox = sandbox @host = @sandbox ? API_URL.gsub('SUBDOMAIN', SANDBOX_SUBDOMAIN) : API_URL.gsub('SUBDOMAIN', PRO_SUBDOMAIN) @api_key = api_key @logger = logger @timeout = timeout # services @cryptocurrency = Endpoint::Cryptocurrency.new(client: self, logger: @logger) @exchange = Endpoint::Exchange.new(client: self, logger: @logger) @global_metrics = Endpoint::GlobalMetrics.new(client: self, logger: @logger) @tools = Endpoint::Tools.new(client: self, logger: @logger) end
Public Instance Methods
default_headers()
click to toggle source
@return [Hash]
# File lib/coin_market_pro/client/base.rb, line 107 def default_headers { 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'User-Agent' => "coin_market_pro/#{CoinMarketPro::VERSION}", 'Accept-Encoding' => 'deflate, gzip', 'X-CMC_PRO_API_KEY' => api_key } end
get(uri, options: {}, headers: {})
click to toggle source
GET request
@param uri [String] @param options [Hash] @param headers [Hash] @return [Result]
# File lib/coin_market_pro/client/base.rb, line 57 def get(uri, options: {}, headers: {}) request do url = host + uri options ||= {} headers ||= {} query_params = CGI.unescape(options.to_query) url += '?' + query_params unless query_params.blank? response = RestClient::Request.execute(method: :get, url: url, headers: default_headers.merge(headers), open_timeout: open_timeout, timeout: timeout) logger.debug(message: 'GET Request', url: url, options: options, status: response.code) success?(response.code) ? Result.success(response) : Result.failed(response) end end
handle_error(error)
click to toggle source
Handle errors @param error [Error] @return [Result]
# File lib/coin_market_pro/client/base.rb, line 99 def handle_error(error) response = error.response message = error.message logger.error(error: 'Request Error', code: response.code, message: message) Result.failed(response) end
open_timeout()
click to toggle source
@return [Integer]
# File lib/coin_market_pro/client/base.rb, line 123 def open_timeout @open_timeout || DEFAULT_TIMEOUT end
request() { || ... }
click to toggle source
@yield [Result]
# File lib/coin_market_pro/client/base.rb, line 78 def request result = yield if result.success? logger.debug(status: result.code, body: result.body) else logger.warn(error: 'Request Error', status: result.code, body: result.body) end result rescue ::RestClient::GatewayTimeout raise Error.new('Gateway timeout') rescue ::RestClient::RequestTimeout raise Error.new('Request timeout') rescue ::RestClient::Exception => e handle_error(e) end
sandbox?()
click to toggle source
@return [Boolean]
# File lib/coin_market_pro/client/base.rb, line 128 def sandbox? sandbox end
timeout()
click to toggle source
@return [Integer]
# File lib/coin_market_pro/client/base.rb, line 118 def timeout @timeout || DEFAULT_TIMEOUT end
Private Instance Methods
success?(status_code = 0)
click to toggle source
@return [Boolean]
# File lib/coin_market_pro/client/base.rb, line 135 def success?(status_code = 0) return true if status_code.in?(200..299) false end