class Cryptoexchange::Services::Pairs

Constants

HTTP_METHOD
MARKET
PAIRS_URL
POST_PARAMS

Public Instance Methods

default_override_exist?() click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 68
def default_override_exist?
  File.exist? default_override_path
end
default_override_path() click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 60
def default_override_path
  File.join(File.dirname(__dir__), "exchanges/#{exchange_class::NAME}/#{exchange_class::NAME}.yml")
end
exchange_class() click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 72
def exchange_class
  exchange_name = self.class.name.split('::')[2]
  Object.const_get "Cryptoexchange::Exchanges::#{exchange_name}::Market"
end
fetch() click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 11
def fetch
  # If PAIRS_URL provided, use that to fetch market pairs
  return fetch_via_api if self.class::PAIRS_URL

  # If gem user has an overriden yaml, use that
  return fetch_via_override(user_override_path) if user_override_exist?

  # Falls back to default overriden yaml
  return fetch_via_override(default_override_path) if default_override_exist?
end
fetch_via_api(endpoint = self.class::PAIRS_URL, params = self.class::POST_PARAMS) click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 22
def fetch_via_api(endpoint = self.class::PAIRS_URL, params = self.class::POST_PARAMS)
  begin
    fetch_response = self.class::HTTP_METHOD == 'POST' ? http_post(endpoint, params) : http_get(endpoint)
    if fetch_response.code == 200
      fetch_response.parse :json
    elsif fetch_response.code == 400
      raise Cryptoexchange::HttpBadRequestError, { response: fetch_response }
    else
      raise Cryptoexchange::HttpResponseError, { response: fetch_response }
    end
  rescue HTTP::ConnectionError => e
    raise Cryptoexchange::HttpConnectionError, { error: e, response: fetch_response }
  rescue HTTP::TimeoutError => e
    raise Cryptoexchange::HttpTimeoutError, { error: e, response: fetch_response }
  rescue JSON::ParserError => e
    raise Cryptoexchange::JsonParseError, { error: e, response: fetch_response }
  rescue TypeError => e
    raise Cryptoexchange::TypeFormatError, { error: e, response: fetch_response }
  end
end
fetch_via_api_using_post(endpoint = self.class::PAIRS_URL, headers = false, body = false) click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 43
def fetch_via_api_using_post(endpoint = self.class::PAIRS_URL, headers = false, body = false)
  fetch_response = if headers && body
                     HTTP.timeout(:write => 2, :connect => 5, :read => 8).headers(headers).post(endpoint, body: body)
                   else
                     HTTP.timeout(:write => 2, :connect => 5, :read => 8).post(endpoint)
                   end
  JSON.parse(fetch_response.to_s)
end
fetch_via_override(path) click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 52
def fetch_via_override(path)
  YAML.load_file(path)[:pairs]
end
http_get(endpoint) click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 77
def http_get(endpoint)
  HTTP.timeout(:write => 2, :connect => 15, :read => 18).follow.get(endpoint)
end
http_post(endpoint, params) click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 81
def http_post(endpoint, params)
  HTTP.timeout(:write => 2, :connect => 5, :read => 8).post(endpoint, json: params)
end
user_override_exist?() click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 64
def user_override_exist?
  File.exist? user_override_path
end
user_override_path() click to toggle source
# File lib/cryptoexchange/services/pairs.rb, line 56
def user_override_path
  "config/cryptoexchange/#{exchange_class::NAME}.yml"
end