Compare commits
No commits in common. "main" and "v0.1.1" have entirely different histories.
@ -1,28 +1,28 @@
|
|||||||
module Rex
|
module Rex
|
||||||
module Book
|
module Book
|
||||||
# Trade Tracker implemented as a simple ring buffer
|
|
||||||
class TradeTracker
|
class TradeTracker
|
||||||
include Enumerable
|
|
||||||
DEFAULT_TRADE_HISTORY_LIMIT = 200
|
DEFAULT_TRADE_HISTORY_LIMIT = 200
|
||||||
|
|
||||||
attr_reader :trades
|
attr_reader :trades
|
||||||
|
|
||||||
def initialize(limit: DEFAULT_TRADE_HISTORY_LIMIT)
|
def initialize(limit: DEFAULT_TRADE_HISTORY_LIMIT)
|
||||||
@limit = limit
|
@limit = limit
|
||||||
@trades = Array.new(limit)
|
@trades = []
|
||||||
@current_id = -1
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def add(trade)
|
def add(trade)
|
||||||
@current_id += 1
|
@trades.push(trade)
|
||||||
idx = (@current_id % @limit)
|
cap
|
||||||
@trades[idx] = trade
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def each(&block)
|
def fetch_trades(limit)
|
||||||
(([@current_id - @limit, 0].max)..@current_id ).each do |id|
|
@trades.last(limit)
|
||||||
yield @trades[id % @limit]
|
end
|
||||||
end
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def cap
|
||||||
|
@trades = @trades.last(@limit)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -50,7 +50,7 @@ module Rex
|
|||||||
end
|
end
|
||||||
|
|
||||||
def fetch_trades(user_id)
|
def fetch_trades(user_id)
|
||||||
@trade_tracker.each do |trade|
|
@trade_tracker.fetch_trades(50).each do |trade|
|
||||||
@outbox.push(
|
@outbox.push(
|
||||||
Messages::TradeFetchEvent.new(
|
Messages::TradeFetchEvent.new(
|
||||||
trade.id,
|
trade.id,
|
||||||
|
@ -28,10 +28,10 @@ Gem::Specification.new do |spec|
|
|||||||
|
|
||||||
spec.add_dependency "rbtree", "~> 0.4.6"
|
spec.add_dependency "rbtree", "~> 0.4.6"
|
||||||
|
|
||||||
spec.add_dependency "eventmachine", "~> 1.2"
|
spec.add_runtime_dependency "eventmachine", "~> 1.2"
|
||||||
spec.add_dependency "em-websocket", "~> 0.5"
|
spec.add_runtime_dependency "em-websocket", "~> 0.5"
|
||||||
|
|
||||||
spec.add_dependency "json-schema", "~> 4"
|
spec.add_runtime_dependency "json-schema", "~> 4"
|
||||||
# For more information and examples about making a new gem, check out our
|
# For more information and examples about making a new gem, check out our
|
||||||
# guide at: https://bundler.io/guides/creating_gem.html
|
# guide at: https://bundler.io/guides/creating_gem.html
|
||||||
end
|
end
|
||||||
|
@ -15,10 +15,10 @@ RSpec.describe Rex::Book::TradeTracker do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#each" do
|
describe "#fetch_trades" do
|
||||||
let(:n) { 3 }
|
let(:n) { 3 }
|
||||||
it "returns only the last n trades" do
|
it "returns only the last n trades" do
|
||||||
expect(instance.to_a).to eq([10, 11])
|
expect(instance.fetch_trades(1)).to eq([11])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user