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