Sha256: 7989a864f28ba2453a320a71ed05901f067c7e39b4193d857502c702c3f00e7f

Contents?: true

Size: 838 Bytes

Versions: 1

Compression:

Stored size: 838 Bytes

Contents

require 'observer'

class Order
  include Observable

  attr_reader :id, :local_id, :side, :size, :sent_at, :status
  attr_accessor :price, :status

  def initialize id, side, price, size
    @id, @side, @price, @size = id, side, price, size
    @sent_at = Time.now
    @cancelled = false
    @status = :pending_accept

    @price = @price.round 2
  end

  def <=> order
    if order.price == price
      @sent_at <=> order.sent_at
    else
      price <=> order.price
    end
  end

  def cancelled?
    @cancelled
  end

  def fill! amount
    changed

    status = :fill
    status = :partial_fill if amount < @size

    @size -= amount
    
    notify_observers status, self
  end

  def cancel!
    return if @cancelled  # can only cancel an order once

    @cancelled = true
    changed
    notify_observers :cancel, self
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruby-trade-0.2 lib/order.rb