Sha256: adf77c3c7fbbf4e4dd8027fb6f4bf39bf97351132f4063ee37ba5fa60490277e

Contents?: true

Size: 827 Bytes

Versions: 2

Compression:

Stored size: 827 Bytes

Contents

require 'observer'

class Order
  include Observable

  attr_reader :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

2 entries across 2 versions & 1 rubygems

Version Path
ruby-trade-0.4 lib/order.rb
ruby-trade-0.3 lib/order.rb