Class: Excoin::Account::Orders

Inherits:
Array
  • Object
show all
Defined in:
lib/account/orders.rb

Instance Method Summary collapse

Constructor Details

#initializeOrders

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

#allObject



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

#refreshObject



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