class CurrencyShushugah::Money

Understands currency and quantity

Attributes

currency[R]
quantity[R]

Public Class Methods

conversion_rates(base_currency, hash_rates) click to toggle source
# File lib/currency_shushugah.rb, line 12
def self.conversion_rates(base_currency, hash_rates)
  @rates = hash_rates.merge(base_currency => 1)
end
new(quantity, currency) click to toggle source
# File lib/currency_shushugah.rb, line 16
def initialize(quantity, currency)
  raise UnsupportedCurrency unless rates[currency]
  @quantity = quantity
  @currency = currency
end
rates() click to toggle source
# File lib/currency_shushugah.rb, line 67
def self.rates
  Money.instance_variable_get(:@rates)
end

Public Instance Methods

*(other) click to toggle source
# File lib/currency_shushugah.rb, line 54
def *(other)
  new_money(quantity * other)
end
+(other) click to toggle source
# File lib/currency_shushugah.rb, line 38
def +(other)
  new_money(quantity + other.convert_to(currency).quantity)
end
-(other) click to toggle source
# File lib/currency_shushugah.rb, line 42
def -(other)
  self + -other
end
-@() click to toggle source
# File lib/currency_shushugah.rb, line 46
def -@
  new_money(-quantity)
end
/(other) click to toggle source
# File lib/currency_shushugah.rb, line 58
def /(other)
  raise DivisionByZero if other.zero?
  self * (1.0 / other)
end
<=>(other) click to toggle source
# File lib/currency_shushugah.rb, line 22
def <=>(other)
  return unless other.class == self.class
  quantity <=> other.convert_to(currency).quantity
end
coerce(other) click to toggle source
# File lib/currency_shushugah.rb, line 50
def coerce(other)
  [self, other]
end
convert_to(other_currency) click to toggle source
# File lib/currency_shushugah.rb, line 31
def convert_to(other_currency)
  raise UnsupportedCurrency unless rates[other_currency]
  return self if currency == other_currency
  new_quantity = @quantity * rates[other_currency] / rates[currency]
  new_money(new_quantity, other_currency)
end
inspect() click to toggle source
# File lib/currency_shushugah.rb, line 27
def inspect
  "#{'%0.2f' % quantity} #{currency}"
end
new_money(quantity, currency = @currency) click to toggle source
# File lib/currency_shushugah.rb, line 63
def new_money(quantity, currency = @currency)
  Money.send :new, quantity.round(2), currency
end

Private Instance Methods

rates() click to toggle source
# File lib/currency_shushugah.rb, line 73
def rates
  self.class.rates
end