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