Class: Excoin::Market::Exchange::Orders

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(exchange) ⇒ Orders

Returns a new instance of Orders.



4
5
6
7
8
# File 'lib/exchange/orders.rb', line 4

def initialize(exchange)
  @currency = exchange.currency
  @commodity = exchange.commodity
  self.update
end

Instance Attribute Details

#allObject (readonly)

Returns the value of attribute all.



2
3
4
# File 'lib/exchange/orders.rb', line 2

def all
  @all
end

#asksObject (readonly)

Returns the value of attribute asks.



2
3
4
# File 'lib/exchange/orders.rb', line 2

def asks
  @asks
end

#bidsObject (readonly)

Returns the value of attribute bids.



2
3
4
# File 'lib/exchange/orders.rb', line 2

def bids
  @bids
end

#ordersObject (readonly)

Returns the value of attribute orders.



2
3
4
# File 'lib/exchange/orders.rb', line 2

def orders
  @orders
end

Instance Method Details

#add(new_order) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/exchange/orders.rb', line 35

def add(new_order)
  begin
    type = new_order.type.downcase
    @orders.select{|k,v| k =~ Regexp.new(type)}[type + "_orders"] << new_order
    if type == "BID"
      @orders.select{|k,v| k =~ Regexp.new(type)}[type + "_orders"].sort_by{|order| order.price}.reverse!
    elsif type == "ASK"
      @orders.select{|k,v| k =~ Regexp.new(type)}[type + "_orders"].sort_by{|order| order.price}
    end
    self.set_order_arrays(new_order.type)
  rescue
    puts "Error in Excoin::Market::Exchange::Orders.add"
    puts new_order
  end
end

#count(attr, value, operator = :==) ⇒ Object



70
71
72
# File 'lib/exchange/orders.rb', line 70

def count(attr, value, operator = :==)
  return filter(attr, value, operator).size
end

#filter(attr, value, operator = :==) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/exchange/orders.rb', line 62

def filter(attr, value, operator = :==)
  attr = attr.to_sym
  if attr == :price or attr == :commodity_amount or attr == :currency_amount
    value = BigDecimal.new(value)
  end
  return @all.select{|order| order.send(attr).send(operator, value)}
end

#remove(order_data) ⇒ Object



51
52
53
54
55
56
57
58
59
60
# File 'lib/exchange/orders.rb', line 51

def remove(order_data)
  begin
    type = order_data['type'].downcase
    @orders.select{|k,v| k =~ Regexp.new(type)}[type + "_orders"].delete_at(@orders.select{|k,v| k =~ Regexp.new(type)}[type + "_orders"].find_index{|order| order.price == BigDecimal.new(order_data['price']) and order.currency_amount == BigDecimal.new(order_data['currency_amount']) and order.commodity_amount == BigDecimal.new(order_data['commodity_amount'])})
    self.set_order_arrays(order_data['type'])
  rescue
    puts "Error in Excoin::Market::Exchange::Orders.remove"
    puts order_data
  end
end

#update(type = nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/exchange/orders.rb', line 10

def update(type = nil)
  unless type
    order_data = self.get
    begin
      @orders = self.process_orders(order_data)
      @bids = @orders['bid_orders']
      @asks = @orders['ask_orders']
      @all = self.populate_all
    rescue
      puts "Error in Excoin::Market::Exchange::Orders.update (unless type)"
      puts order_data
    end
  else
    order_data = self.get(type)
    begin
     orders_by_type = self.process_by_type(order_data)
     @orders.merge!(orders_by_type)
     self.set_order_arrays(type)
    rescue
      puts "Error in Excoin::Market::Exchange::Orders.update (else)"
      puts order_data
    end
  end
end