class CoinPortfolio::Inventory

Attributes

transactions[R]

Public Class Methods

new(transactions) click to toggle source
# File lib/coin_portfolio/inventory.rb, line 3
def initialize(transactions)
  @transactions = transactions
end

Public Instance Methods

build() click to toggle source
# File lib/coin_portfolio/inventory.rb, line 7
def build
  build_inventory_with_fifo_method
end

Private Instance Methods

build_inventory_with_fifo_method() click to toggle source
# File lib/coin_portfolio/inventory.rb, line 15
def build_inventory_with_fifo_method
  outgoing_quantity = total_outgoing_quantity
  incoming_transactions.each_with_object([]) do |transaction, inventory_items|
    transaction_quantity = transaction.amount.amount
    remaining_quantity = transaction_quantity - outgoing_quantity
    if remaining_quantity > 0
      item = InventoryItem.new(quantity: remaining_quantity, cost: transaction.price)
      inventory_items.push(item)
    end

    outgoing_quantity = [0, outgoing_quantity - transaction_quantity].max
  end
end
incoming_transactions() click to toggle source
# File lib/coin_portfolio/inventory.rb, line 29
def incoming_transactions
  transactions.select(&:incoming?)
end
total_outgoing_quantity() click to toggle source
# File lib/coin_portfolio/inventory.rb, line 33
def total_outgoing_quantity
  transactions.reject(&:incoming?).reduce(0) do |sum, transaction|
    sum + transaction.amount.amount
  end
end