48 lines
1.0 KiB
Ruby
48 lines
1.0 KiB
Ruby
# encoding: UTF-8
|
|
# frozen_string_literal: true
|
|
|
|
module Matching
|
|
|
|
# NOTE: Name is TradeStruct for not confusing it with ActiveRecord Trade model.
|
|
# TODO: Use TradeStruct instead of trade_price, trade_volume, trade_funds.
|
|
TradeStruct = Struct.new(:price, :amount, :total)
|
|
|
|
ZERO = 0.to_d unless defined?(ZERO)
|
|
|
|
Error = Class.new(StandardError)
|
|
|
|
class OrderError < Error
|
|
|
|
attr_reader :order
|
|
|
|
def initialize(order, message=nil)
|
|
@order = order
|
|
super "#{message} (#{order.attributes})"
|
|
end
|
|
end
|
|
|
|
class TradeError < Error
|
|
|
|
attr_reader :trade
|
|
|
|
def initialize(trade, message=nil)
|
|
@trade = trade
|
|
super "#{message} (#{trade})"
|
|
end
|
|
end
|
|
|
|
# TODO: Use OrderError & TradeError instead of
|
|
# NotEnoughVolume, ExceedSumLimit, TradeExecutionError.
|
|
class NotEnoughVolume < Error; end
|
|
class ExceedSumLimit < Error; end
|
|
class MarketOrderbookError < OrderError; end
|
|
|
|
class TradeExecutionError < Error
|
|
attr_accessor :options
|
|
|
|
def initialize(options = {})
|
|
self.options = options
|
|
end
|
|
end
|
|
end
|