Class: Honeymaker::Exchange
- Inherits:
-
Object
- Object
- Honeymaker::Exchange
show all
- Defined in:
- lib/honeymaker/exchange.rb
Direct Known Subclasses
Honeymaker::Exchanges::Binance, Honeymaker::Exchanges::BingX, Honeymaker::Exchanges::BitMart, Honeymaker::Exchanges::Bitget, Honeymaker::Exchanges::Bitrue, Honeymaker::Exchanges::Bitvavo, Honeymaker::Exchanges::Bybit, Honeymaker::Exchanges::Coinbase, Honeymaker::Exchanges::Gemini, Honeymaker::Exchanges::Hyperliquid, Honeymaker::Exchanges::Kraken, Honeymaker::Exchanges::Kucoin, Honeymaker::Exchanges::Mexc
Constant Summary
collapse
- OPTIONS =
{
request: {
open_timeout: 5,
read_timeout: 30,
write_timeout: 5
}
}.freeze
- ERROR_PATTERNS =
[].freeze
Instance Method Summary
collapse
Instance Method Details
#cache_ttl ⇒ Object
68
69
70
|
# File 'lib/honeymaker/exchange.rb', line 68
def cache_ttl
3600
end
|
#classify_error(message) ⇒ Object
15
16
17
18
19
20
21
22
23
|
# File 'lib/honeymaker/exchange.rb', line 15
def classify_error(message)
return nil if message.nil?
self.class::ERROR_PATTERNS.each do |entry|
next unless (match = entry[:pattern].match(message))
return { code: entry[:code], **match.named_captures.transform_keys(&:to_sym) }
end
nil
end
|
#find_ticker(symbol) ⇒ Object
53
54
55
56
57
58
59
|
# File 'lib/honeymaker/exchange.rb', line 53
def find_ticker(symbol)
result = tickers_info
return result if result.failure?
ticker = result.data.find { |t| t[:ticker] == symbol }
ticker ? Result::Success.new(ticker) : Result::Failure.new("Unknown symbol: #{symbol}")
end
|
#get_bid_ask(symbol) ⇒ Object
29
30
31
|
# File 'lib/honeymaker/exchange.rb', line 29
def get_bid_ask(symbol)
raise NotImplementedError, "#{self.class} must implement #get_bid_ask"
end
|
#get_price(symbol) ⇒ Object
33
34
35
36
37
38
|
# File 'lib/honeymaker/exchange.rb', line 33
def get_price(symbol)
result = get_bid_ask(symbol)
return result if result.failure?
Result::Success.new((result.data[:bid] + result.data[:ask]) / 2)
end
|
#get_tickers_info ⇒ Object
25
26
27
|
# File 'lib/honeymaker/exchange.rb', line 25
def get_tickers_info
raise NotImplementedError, "#{self.class} must implement #get_tickers_info"
end
|
#symbols ⇒ Object
61
62
63
64
65
66
|
# File 'lib/honeymaker/exchange.rb', line 61
def symbols
result = tickers_info
return result if result.failure?
Result::Success.new(result.data.map { |t| { base: t[:base], quote: t[:quote] } })
end
|
#tickers_info ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/honeymaker/exchange.rb', line 40
def tickers_info
if @tickers_info_cache && @tickers_info_expires_at && @tickers_info_expires_at > Time.now
return Result::Success.new(@tickers_info_cache)
end
result = get_tickers_info
if result.success?
@tickers_info_cache = result.data
@tickers_info_expires_at = Time.now + cache_ttl
end
result
end
|