class Excoin::Account::Orders
Public Class Methods
new()
click to toggle source
# File lib/account/orders.rb, line 3 def initialize self.refresh end
Public Instance Methods
add(order)
click to toggle source
# File lib/account/orders.rb, line 38 def add(order) begin self.select{|exchange_order_set| exchange_order_set.has_value?(order.currency + order.commodity)}[0].select{|k,v| k =~ Regexp.new(order.type.downcase)}[order.type.downcase + "_orders"] << order rescue puts "Error in Excoin::Account::Orders.add" puts order end end
all()
click to toggle source
# File lib/account/orders.rb, line 34 def all self.collect{|order_set| order_set.select{|k,v| k =~ Regexp.new("_orders")}.values}.collect{|orders| orders}.flatten end
count(attr = nil, value = nil, operator = :==)
click to toggle source
# File lib/account/orders.rb, line 89 def count(attr = nil, value = nil, operator = :==) if attr return self.filter(attr, value, operator).size else count = 0 self.each do |h| # maybe this can be redone with inject h.select{|k,v| k =~ /_orders/}.each_pair do |k,v| count += v.size end end return count end end
delete(order_data)
click to toggle source
# File lib/account/orders.rb, line 47 def delete(order_data) begin self.select{|exchange_order_set| exchange_order_set.has_value?(order_data['currency'] + order_data['commodity'])}[0].select{|k,v| k =~ Regexp.new(order_data['type'].downcase)}[order_data['type'].downcase + "_orders"].delete_at(self.select{|exchange_order_set| exchange_order_set.has_value?(order_data['currency'] + order_data['commodity'])}[0].select{|k,v| k =~ Regexp.new(order_data['type'].downcase)}[order_data['type'].downcase + "_orders"].find_index{|order| order.id == order_data['id']}) rescue puts "Error in Excoin::Account::Orders.delete" puts order_data end end
filter(attr, value, operator = :==)
click to toggle source
# File lib/account/orders.rb, line 56 def filter(attr, value, operator = :==) orders_by_attr = Array.new if attr == "currency" or attr == "commodity" or attr == "exchange_name" self.select{|h| h[attr] == value}.each do |h| h.select{|k,v| k =~ Regexp.new("_orders")}.each_value do |orders| orders.each do |order| orders_by_attr << order end end end else self.each do |h| if attr == "type" h.select{|k,v| k =~ Regexp.new(value.upcase)}.each_value do |orders| orders.each do |order| orders_by_attr << order end end else h.select{|k,v| k =~ Regexp.new("_orders")}.each_value do |orders| orders.each do |order| value = BigDecimal.new(value) if order.send(attr).send(operator, value) orders_by_attr << order end end end end end end return orders_by_attr end
refresh()
click to toggle source
# File lib/account/orders.rb, line 26 def refresh self.clear all_orders = self.populate_all_orders all_orders.each do |exchange_order_set| self.push(exchange_order_set) end end
update(exchange_name = nil)
click to toggle source
# File lib/account/orders.rb, line 7 def update(exchange_name = nil) begin unless exchange_name all_orders = populate_all_orders all_orders.each do |exchange_order_set| self.select{|h| h['exchange_name'] == exchange_order_set['exchange_name']}.first.merge!(exchange_order_set) end else exchange = Excoin.market.exchange(exchange_name) exchange_order_data = self.get(exchange.currency, exchange.commodity) exchange_orders = self.process_orders_by_exchange(exchange_order_data) self.select{|h| h['currency'] == currency and h['commodity'] == commodity}.first.merge!(exchange_orders) end rescue puts "Error in Excoin::Account::Orders.update" puts exchange_order_data end end
Protected Instance Methods
get(currency = nil, commodity = nil, type = nil)
click to toggle source
# File lib/account/orders.rb, line 106 def get(currency = nil, commodity = nil, type = nil) Excoin.api.account_open_orders(currency, commodity, type) end
populate_all_orders()
click to toggle source
# File lib/account/orders.rb, line 132 def populate_all_orders order_data = self.get orders = order_data.collect{|exchange_order_data| self.process_orders_by_exchange(exchange_order_data)} return orders end
process_orders_by_exchange(exchange_order_data)
click to toggle source
# File lib/account/orders.rb, line 110 def process_orders_by_exchange(exchange_order_data) begin currency = exchange_order_data.select{|k,v| k == 'currency'} commodity = exchange_order_data.select{|k,v| k == 'commodity'} exchange_orders = {"exchange_name" => currency['currency'] + commodity['commodity']}.merge(currency).merge(commodity) exchange_order_data['orders'].each do |hash_by_type| orders_by_type = Array.new type = hash_by_type.select{|k,v| k == 'type'} hash_by_type['orders'].each do |o| o.merge!(type).merge!(currency).merge!(commodity) order = Excoin::Account::Order.new(o) orders_by_type << order end exchange_orders.merge!({ "#{type['type'].downcase}_orders" => orders_by_type}) end return exchange_orders rescue puts "Error in Excoin::Account::Orders.process_orders_by_exchange" puts exchange_order_data end end