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