Sha256: 262d72fdbe46526b85a02ed942fd471b2f965931e1b29bb7590196aa6b5ca799

Contents?: true

Size: 826 Bytes

Versions: 1

Compression:

Stored size: 826 Bytes

Contents

require 'observer'

class Account
  include Observable

  attr_reader :id, :stock, :cash, :name
  attr_accessor :ai
  
  def initialize id, name, stock, cash
    @id, @name, @stock, @cash = id, name, stock, cash
    @ai = false
  end

  def process_dividend amount
    value = stock * amount

    @cash += value

    changed
    notify_observers :dividend, {amount: amount, value: value}
  end

  def update_name name
    if @name != name
      @name = name
      changed
      notify_observers :name_change, name
    end
  end

  def on_trade order, amount
    if order.side == :buy
      @stock += amount
      @cash -= order.price * amount
    else
      @stock -= amount
      @cash += order.price * amount
    end
  end

  def net_value current_price
    @cash + @stock * current_price
  end

  def ai?
    @ai
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruby-trade-0.3 server/account.rb