Class: Excoin::Account::Orders
- Inherits:
-
Array
- Object
- Array
- Excoin::Account::Orders
- Defined in:
- lib/account/orders.rb
Instance Method Summary collapse
- #add(order) ⇒ Object
- #all ⇒ Object
- #count(attr = nil, value = nil, operator = :==) ⇒ Object
- #delete(order_data) ⇒ Object
- #filter(attr, value, operator = :==) ⇒ Object
-
#initialize ⇒ Orders
constructor
A new instance of Orders.
- #refresh ⇒ Object
- #update(exchange_name = nil) ⇒ Object
Constructor Details
#initialize ⇒ Orders
Returns a new instance of Orders.
3 4 5 |
# File 'lib/account/orders.rb', line 3 def initialize self.refresh end |
Instance Method Details
#add(order) ⇒ Object
38 39 40 41 42 43 44 45 |
# 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 ⇒ Object
34 35 36 |
# 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 = :==) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# 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) ⇒ Object
47 48 49 50 51 52 53 54 |
# 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 = :==) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# 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 ⇒ Object
26 27 28 29 30 31 32 |
# 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) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 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 |