diff --git a/lib/cryptoexchange/exchanges/allcoin/services/order_book.rb b/lib/cryptoexchange/exchanges/allcoin/services/order_book.rb index fc165faa5..4a495cc07 100644 --- a/lib/cryptoexchange/exchanges/allcoin/services/order_book.rb +++ b/lib/cryptoexchange/exchanges/allcoin/services/order_book.rb @@ -24,12 +24,21 @@ def adapt(output, market_pair) order_book.base = market_pair.base order_book.target = market_pair.target order_book.market = Allcoin::Market::NAME - order_book.asks = output['asks'] - order_book.bids = output['bids'] + order_book.asks = adapt_orders output['asks'] + order_book.bids = adapt_orders output['bids'] order_book.timestamp = timestamp order_book.payload = output order_book end + + def adapt_orders(orders) + orders.collect do |order_entry| + price, amount = order_entry + Cryptoexchange::Models::Order.new(price: price, + amount: amount, + timestamp: nil) + end + end end end end diff --git a/lib/cryptoexchange/exchanges/coinmate/services/order_book.rb b/lib/cryptoexchange/exchanges/coinmate/services/order_book.rb index ef627d5d0..cf6eb9bfc 100644 --- a/lib/cryptoexchange/exchanges/coinmate/services/order_book.rb +++ b/lib/cryptoexchange/exchanges/coinmate/services/order_book.rb @@ -32,8 +32,11 @@ def adapt(output, market_pair) end def adapt_orders(orders, timestamp) - # Format as: [price, amount, timestamp] - orders.collect { |order_entry| order_entry.values << timestamp } + orders.collect do |order_entry| + Cryptoexchange::Models::Order.new(price: order_entry['price'], + amount: order_entry['amount'], + timestamp: timestamp) + end end end end diff --git a/lib/cryptoexchange/exchanges/gemini/services/order_book.rb b/lib/cryptoexchange/exchanges/gemini/services/order_book.rb index 50de0e030..5724550f1 100644 --- a/lib/cryptoexchange/exchanges/gemini/services/order_book.rb +++ b/lib/cryptoexchange/exchanges/gemini/services/order_book.rb @@ -31,8 +31,12 @@ def adapt(output, market_pair) end def adapt_orders(orders) - # Format as: [price, amount, timestamp] - orders.collect { |order_entry| order_entry.values } + orders.collect do |order_entry| + price, amount, timestamp = order_entry.values + Cryptoexchange::Models::Order.new(price: price, + amount: amount, + timestamp: timestamp) + end end end end diff --git a/lib/cryptoexchange/models/order.rb b/lib/cryptoexchange/models/order.rb new file mode 100644 index 000000000..b133bf8eb --- /dev/null +++ b/lib/cryptoexchange/models/order.rb @@ -0,0 +1,13 @@ +module Cryptoexchange + module Models + class Order + attr_accessor :price, :amount, :timestamp + + def initialize(args={}) + @price = args[:price] + @amount = args[:amount] + @timestamp = args[:timestamp] || nil + end + end + end +end diff --git a/lib/cryptoexchange/models/order_book.rb b/lib/cryptoexchange/models/order_book.rb index df510b2bc..419c876e9 100644 --- a/lib/cryptoexchange/models/order_book.rb +++ b/lib/cryptoexchange/models/order_book.rb @@ -4,6 +4,16 @@ class OrderBook attr_accessor :base, :target, :market, :bids, :asks, :timestamp, :payload + def initialize(args = {}) + @base = args[:base] + @target = args[:target] + @market = args[:market] + @bids = args[:bids] || [] + @asks = args[:asks] || [] + @timestamp = args[:timestamp] + @payload = args[:payload] + end + def base @base.upcase end diff --git a/spec/exchanges/allcoin/integration/market_spec.rb b/spec/exchanges/allcoin/integration/market_spec.rb index 6a472a741..35ff09a7b 100644 --- a/spec/exchanges/allcoin/integration/market_spec.rb +++ b/spec/exchanges/allcoin/integration/market_spec.rb @@ -38,8 +38,9 @@ expect(order_book.market).to eq 'allcoin' expect(order_book.asks).to_not be_empty expect(order_book.bids).to_not be_empty - expect(order_book.asks.first.size).to eq 2 - expect(order_book.bids.first.size).to eq 2 + expect(order_book.asks.first.price).to_not be_nil + expect(order_book.bids.first.amount).to_not be_nil + expect(order_book.bids.first.timestamp).to be_nil expect(order_book.asks.count).to be > 10 expect(order_book.bids.count).to be > 10 expect(order_book.timestamp).to be_a Numeric diff --git a/spec/exchanges/coinmate/integration/market_spec.rb b/spec/exchanges/coinmate/integration/market_spec.rb index eb306e1ee..b948f0742 100644 --- a/spec/exchanges/coinmate/integration/market_spec.rb +++ b/spec/exchanges/coinmate/integration/market_spec.rb @@ -41,8 +41,9 @@ expect(order_book.market).to eq market expect(order_book.asks).to_not be_empty expect(order_book.bids).to_not be_empty - expect(order_book.asks.first.size).to eq 3 - expect(order_book.bids.first.size).to eq 3 + expect(order_book.asks.first.price).to_not be_nil + expect(order_book.bids.first.amount).to_not be_nil + expect(order_book.bids.first.timestamp).to_not be_nil expect(order_book.asks.count).to be > 10 expect(order_book.bids.count).to be > 10 expect(order_book.timestamp).to be_a Numeric diff --git a/spec/exchanges/gemini/integration/market_spec.rb b/spec/exchanges/gemini/integration/market_spec.rb index 749cbdb24..66a8f61c3 100644 --- a/spec/exchanges/gemini/integration/market_spec.rb +++ b/spec/exchanges/gemini/integration/market_spec.rb @@ -37,8 +37,9 @@ expect(order_book.market).to eq 'gemini' expect(order_book.asks).to_not be_empty expect(order_book.bids).to_not be_empty - expect(order_book.asks.first.size).to eq 3 - expect(order_book.bids.first.size).to eq 3 + expect(order_book.asks.first.price).to_not be_nil + expect(order_book.bids.first.amount).to_not be_nil + expect(order_book.bids.first.timestamp).to_not be_nil expect(order_book.timestamp).to be_a Numeric expect(order_book.payload).to_not be nil end diff --git a/spec/models/order.rb b/spec/models/order.rb new file mode 100644 index 000000000..64d725e37 --- /dev/null +++ b/spec/models/order.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +RSpec.describe Cryptoexchange::Models::Order do + let(:time_now) { Time.now.to_i } + let(:order) { described_class.new(price: 1000, amount: 9999) } + let(:order_with_timestamp) do + described_class.new(price: 1000, amount: 9999, timestamp: time_now) + end + + it { expect(order.price).to eq 1000 } + it { expect(order.amount).to eq 9999 } + it { expect(order.timestamp).to be_nil } + it { expect(order_with_timestamp.timestamp).to eq time_now } +end diff --git a/spec/models/order_book.rb b/spec/models/order_book.rb new file mode 100644 index 000000000..b46ceb796 --- /dev/null +++ b/spec/models/order_book.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +RSpec.describe Cryptoexchange::Models::OrderBook do + let(:new_order_book) { described_class.new } + it { expect(new_order_book.bids).to be_empty } + it { expect(new_order_book.asks).to be_empty } +end diff --git a/spec/models/trade.rb b/spec/models/trade.rb new file mode 100644 index 000000000..749cdedef --- /dev/null +++ b/spec/models/trade.rb @@ -0,0 +1,4 @@ +require 'spec_helper' + +RSpec.describe Cryptoexchange::Models::Trade do +end