module Moneymarket::Calculator

Public Instance Methods

fee(amount: nil, percent: nil) click to toggle source
# File lib/moneymarket/utils/calculator.rb, line 16
def fee(amount: nil, percent: nil)
  result = (amount.cents * (percent.to_d / 100)).floor # fees always round to floor
  Money.new result, amount.currency
end
order_fee(order: nil, collected_amount: nil) click to toggle source
# File lib/moneymarket/utils/calculator.rb, line 21
def order_fee(order: nil, collected_amount: nil) # move this to command
  collected_amount = order.collected_amount if collected_amount.nil?
  fee_cents = (collected_amount.cents * (order.fee.to_d / 100)).floor
  Money.new fee_cents, collected_amount.currency
end
quote(volume: nil, unit_price: nil) click to toggle source
# File lib/moneymarket/utils/calculator.rb, line 5
def quote(volume: nil, unit_price: nil)
  base_currency = volume.currency
  quote = ((unit_price.cents * volume.cents).to_d / base_currency.subunit_to_unit).ceil
  Money.new quote, unit_price.currency
end
volume(quote: nil, unit_price: nil, unit_currency: nil) click to toggle source
# File lib/moneymarket/utils/calculator.rb, line 11
def volume(quote: nil, unit_price: nil, unit_currency: nil)
  volume = ((quote.cents * unit_currency.subunit_to_unit).to_d / unit_price.cents).floor
  Money.new volume, unit_currency
end