class CurrencyManager::Money

Public Class Methods

conversion_rates(currency, rates = {}) click to toggle source
# File lib/currency_manager/money.rb, line 12
def self.conversion_rates(currency, rates = {})
  raise ArgumentError, 'base currency key is not a String' unless currency.is_a? String
  raise ArgumentError, 'base currency rates is not a Hash' unless rates.is_a? Hash
  @@rates = {}

  rates.each do |key, value|
    unless key.is_a? String
      @@rates = {}
      raise ArgumentError, 'currency key is not a String'
    end

    unless value.is_a? Numeric
      @@rates = {}
      raise ArgumentError, "currency '#{key}' rate is not a Number"
    end

    @@rates[key.downcase] = value
  end

  @@base_currency = currency.downcase
  @@rates[@@base_currency] = 1
  true
end
new(amount, currency) click to toggle source
# File lib/currency_manager/money.rb, line 5
def initialize(amount, currency)
  raise ArgumentError, 'currency rate is not a Number' unless amount.is_a? Numeric
  raise ArgumentError, 'currency name is not a String' unless currency.is_a? String
  @amount = amount
  @currency = currency
end

Public Instance Methods

==(money) click to toggle source
# File lib/currency_manager/money.rb, line 78
def ==(money)
    return false unless money.is_a?(self.class)
    new_amount = convert_amount(money.amount, money.currency, @currency)
    @amount.round(2) == new_amount.round(2)
end
amount() click to toggle source
# File lib/currency_manager/money.rb, line 36
def amount
  @amount
end
convert_to(new_currency) click to toggle source
# File lib/currency_manager/money.rb, line 48
def convert_to(new_currency)
  new_amount = convert_amount(@amount, @currency, new_currency)
  self.class.new(new_amount, new_currency)
end
currency() click to toggle source
# File lib/currency_manager/money.rb, line 40
def currency
  @currency
end
inspect() click to toggle source
# File lib/currency_manager/money.rb, line 44
def inspect
  '%.2f ' %  @amount + @currency
end

Private Instance Methods

convert_amount(amount, old_currency, new_currency) click to toggle source
# File lib/currency_manager/money.rb, line 86
def convert_amount(amount, old_currency, new_currency)
  if @@rates.has_key?(new_currency.downcase) && @@rates.has_key?(old_currency.downcase)
    amount.fdiv(@@rates[old_currency.downcase]) * @@rates[new_currency.downcase]
  else
    raise ArgumentError, 'undefined currency rate'
  end
end
money?(money) click to toggle source
# File lib/currency_manager/money.rb, line 94
def money?(money)
  raise ArgumentError, "must be instance of #{self.class}" unless money.is_a?(self.class)
end