class Market::Exchange::Orders
Attributes
all[R]
asks[R]
bids[R]
orders[R]
Public Class Methods
new(exchange)
click to toggle source
# File lib/exchange/orders.rb, line 4 def initialize(exchange) @currency = exchange.currency @commodity = exchange.commodity self.update end
Public Instance Methods
add(new_order)
click to toggle source
# 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 = :==)
click to toggle source
# File lib/exchange/orders.rb, line 70 def count(attr, value, operator = :==) return filter(attr, value, operator).size end
filter(attr, value, operator = :==)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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
Protected Instance Methods
get(type = nil)
click to toggle source
# File lib/exchange/orders.rb, line 76 def get(type = nil) Excoin.api.exchange_open_orders(@currency, @commodity, type) end
populate_all()
click to toggle source
# File lib/exchange/orders.rb, line 108 def populate_all all = Array.new @bids.each do |o| all << o end @asks.each do |o| all << o end return all end
process_by_type(hash_by_type)
click to toggle source
# File lib/exchange/orders.rb, line 88 def process_by_type(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" => @currency, "commodity" => @commodity}) order = Excoin::Market::Exchange::Order.new(o) orders_by_type << order end return { "#{type['type'].downcase}_orders" => orders_by_type } end
process_orders(exchange_order_data)
click to toggle source
# File lib/exchange/orders.rb, line 80 def process_orders(exchange_order_data) exchange_orders = Hash.new exchange_order_data.each do |hash_by_type| exchange_orders.merge!(process_by_type(hash_by_type)) end return exchange_orders end
set_order_arrays(type)
click to toggle source
# File lib/exchange/orders.rb, line 99 def set_order_arrays(type) if type.downcase == "bid" @bids = @orders[type.downcase + "_orders"] elsif type.downcase == "ask" @asks = @orders[type.downcase + "_orders"] end @all = self.populate_all end