Files
Dena/lib/peatio/coin_market_cap.rb
2026-08-13 19:50:53 +03:30

44 lines
1.1 KiB
Ruby

# frozen_string_literal: true
class CoinMarketCap
Error = Class.new(StandardError)
class << self
def default_client
new(default_options)
end
def default_options
{
host: ENV.fetch('CMC_HOST','pro-api.coinmarketcap.com'),
path: '/v1/cryptocurrency/map',
query: {
CMC_PRO_API_KEY: 'UNIFIED-CRYPTOASSET-INDEX',
listing_status: 'active'
}.to_query
}
end
end
def initialize(options)
url = ::URI::HTTPS.build(options.slice(:host, :path, :query))
@connection = Faraday.new(url) do |conn|
conn.response :raise_error
conn.adapter Faraday.default_adapter
end
end
def get(params={})
response = @connection.get do |req|
req.params = @connection.params.merge(params.as_json)
end
JSON(response.body).deep_symbolize_keys.yield_self do |body|
# Error code will be equal to zero if there is no error
raise Error, body[:status][:error_message] if body[:status][:error_code].nonzero? || body[:data].blank?
body[:data]
end
end
end