Class: Trader::GameBackend

Inherits:
BaseBackend show all
Defined in:
lib/trade-o-matic/adapters/game_backend.rb,
lib/trade-o-matic/adapters/game_backend.rb,
lib/trade-o-matic/adapters/game_backend/sfm.rb,
lib/trade-o-matic/adapters/game_backend/state.rb,
lib/trade-o-matic/adapters/game_backend/cancel_order.rb,
lib/trade-o-matic/adapters/game_backend/configuration.rb,
lib/trade-o-matic/adapters/game_backend/execute_order.rb

Overview

This is needed to prevent one of the subclass files from defining the class without the superclass.

Defined Under Namespace

Modules: Configuration, SFM Classes: CancelOrder, ExecuteOrder, GameBalance, GameOrder, State

Constant Summary collapse

STATUS_MAP =
{
  'open' => AccountOrder::OPEN,
  'closed' => AccountOrder::CLOSED,
  'canceled' => AccountOrder::CANCELED
}

Instance Attribute Summary collapse

Attributes inherited from BaseBackend

#name

Instance Method Summary collapse

Methods inherited from BaseBackend

#generate_endpoint, #listen_transactions, #not_supported, #withdraw_to_endpoint

Constructor Details

#initializeGameBackend

Returns a new instance of GameBackend.



46
47
48
49
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 46

def initialize
  super :game
  @state = State.new
end

Instance Attribute Details

#stateObject (readonly)

Returns the value of attribute state.



44
45
46
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 44

def state
  @state
end

#verboseObject (readonly)

Returns the value of attribute verbose.



44
45
46
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 44

def verbose
  @verbose
end

Instance Method Details

#cancel_order(_session, _order_id) ⇒ Object



128
129
130
131
132
133
134
135
136
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 128

def cancel_order(_session, _order_id)
  with_session do
    cancel_order = CancelOrder.new
    cancel_order.state = state
    cancel_order. = _session
    cancel_order.order_id = _order_id.to_i
    cancel_order.perform
  end
end

#create_order(_session, _pair, _volume, _price, _instruction) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 115

def create_order(_session, _pair, _volume, _price, _instruction)
  with_session do
    execute_order = ExecuteOrder.new
    execute_order.state = state
    execute_order. = _session
    execute_order.pair = _pair
    execute_order.volume = SFM.encode _volume
    execute_order.limit = SFM.encode _price
    execute_order.instruction = _instruction
    execute_order.perform
  end
end

#decrement_balance(_account_name, _currency, _amount = nil) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 63

def decrement_balance(, _currency, _amount = nil)
  if _amount.nil?
    _amount = _currency.amount
    _currency = _currency.currency
  end

  with_session do
    balance = state.balance_for(, Currency.for_code(_currency))
    balance['available'] -= SFM.encode(_amount)
    balance['available'] = 0 if balance['available'] < 0
  end
end

#fetch_order(_session, _order_id) ⇒ Object



109
110
111
112
113
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 109

def fetch_order(_session, _order_id)
  with_session(true) do
    GameOrder.new state.find_order_by_id(_order_id.to_i)[:order]
  end
end

#fill_book(_book) ⇒ Object



84
85
86
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 84

def fill_book(_book)
  # TODO
end

#get_available_marketsObject

backend implementation:



78
79
80
81
82
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 78

def get_available_markets
  with_session(true) do
    state.all_markets
  end
end

#get_balance(_session, _currency) ⇒ Object



93
94
95
96
97
98
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 93

def get_balance(_session, _currency)
  with_session(true) do
    balance = state.balance_for(_session, _currency)
    GameBalance.new balance
  end
end

#get_orders(_session, _pair) ⇒ Object



100
101
102
103
104
105
106
107
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 100

def get_orders(_session, _pair)
  with_session(true) do
    market = state.market_for(_pair)
    open = market['open'].select { |o| o['account'] = _session }
    closed = market['closed'].select { |o| o['account'] = _session }
    (open + closed).map { |o| GameOrder.new o }
  end
end

#get_session(_config) ⇒ Object

Raises:



88
89
90
91
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 88

def get_session(_config)
  raise AssertError, 'must provide login information' if _config.nil? or _config[:name].nil?
  _config[:name]
end

#increment_balance(_account_name, _currency, _amount = nil) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/trade-o-matic/adapters/game_backend.rb', line 51

def increment_balance(, _currency, _amount = nil)
  if _amount.nil?
    _amount = _currency.amount
    _currency = _currency.currency
  end

  with_session do
    balance = state.balance_for(, Currency.for_code(_currency))
    balance['available'] += SFM.encode(_amount)
  end
end