class CoinPortfolio::Liquidation

Constants

Details

Attributes

inventory_items[R]

Public Class Methods

new(inventory_items) click to toggle source
# File lib/coin_portfolio/liquidation.rb, line 4
def initialize(inventory_items)
  @inventory_items = inventory_items
end

Public Instance Methods

details(price) click to toggle source
# File lib/coin_portfolio/liquidation.rb, line 8
def details(price)
  current_portfolio_value = current_portfolio_value(price)
  gains_percentage = (current_portfolio_value - portfolio_cost).to_f / portfolio_cost
  currency = price.currency

  attributes = {
    portfolio_cost: Money.new(amount: portfolio_cost, currency: currency),
    current_portfolio_value: Money.new(amount: current_portfolio_value, currency: currency),
    gains_percentage: gains_percentage
  }
  Details.new(attributes)
end

Private Instance Methods

current_portfolio_value(price) click to toggle source
# File lib/coin_portfolio/liquidation.rb, line 29
def current_portfolio_value(price)
  total_item_quantity * price.amount
end
portfolio_cost() click to toggle source
# File lib/coin_portfolio/liquidation.rb, line 23
def portfolio_cost
  inventory_items.reduce(0) do |sum, item|
    sum + (item.quantity * item.cost.amount)
  end
end
total_item_quantity() click to toggle source
# File lib/coin_portfolio/liquidation.rb, line 33
def total_item_quantity
  inventory_items.reduce(0) do |sum, item|
    sum + item.quantity
  end
end