class Money
Attributes
amount[RW]
conversion[RW]
currency[RW]
Public Class Methods
new(amount, currency = nil)
click to toggle source
# File lib/moneygm.rb, line 3 def initialize(amount, currency = nil) @amount = amount @currency = currency || "EUR" #Si no hay moneda definida, la default es EUR @conversion = { 'USD' => 1.11, 'Bitcoin' => 0.0047 } if @currency == "EUR" @conversion = { 'EUR' => 0.90, 'Bitcoin' => 0.00423 } if @currency == "USD" @conversion = { 'EUR' => 212.76, 'USD' => 236.16 } if @currency == "Bitcoin" end
Public Instance Methods
*(multiplier)
click to toggle source
Para la multiplicacion y la division se asume que los parametros seran valores numericos y no un objeto
# File lib/moneygm.rb, line 58 def * (multiplier) value = self.amount * multiplier "#{value} #{self.currency}" end
+(object_to_add)
click to toggle source
Para la suma y la resta se asume que siempre seran dos objetos de tipo Money
y que si las monedas son diferentes la conversion se hara a EUR
# File lib/moneygm.rb, line 35 def + (object_to_add) if self.currency == object_to_add.currency value = self.amount + object_to_add.amount "#{value} #{self.currency}" else value = self.convert_to('EUR').amount + object_to_add.convert_to('EUR').amount "#{value} EUR" end end
-(obj_to_substract)
click to toggle source
# File lib/moneygm.rb, line 45 def - (obj_to_substract) if self.currency == obj_to_substract.currency value = self.amount - obj_to_substract.amount # se coloca el valor absoluto (value.abs) ya que si restas dos monedas (ej 2 billetes) no queda un saldo negativo, sin importar el orden de los factores "#{value.abs} #{self.currency}" else value = self.convert_to('EUR').amount - obj_to_substract.convert_to('EUR').amount "#{value.abs} EUR" end end
/(divider)
click to toggle source
# File lib/moneygm.rb, line 63 def / (divider) value = self.amount / divider "#{value} #{self.currency}" end
<(obj)
click to toggle source
# File lib/moneygm.rb, line 79 def < (obj) value = self.convert_to('EUR').amount < obj.convert_to('EUR').amount ? true : false end
==(obj)
click to toggle source
Solo se consideran los operadores == , >, <
# File lib/moneygm.rb, line 71 def == (obj) value = self.convert_to('EUR').amount == obj.convert_to('EUR').amount ? true : false end
>(obj)
click to toggle source
# File lib/moneygm.rb, line 75 def > (obj) value = self.convert_to('EUR').amount > obj.convert_to('EUR').amount ? true : false end
convert_to(currency_to_convert)
click to toggle source
Retorna una copia del objeto con la conversion solicitada, si la moneda no existe retorna el obj inicial
# File lib/moneygm.rb, line 16 def convert_to(currency_to_convert) obj_copy = self.dup #copio el objeto return obj_copy if self.conversion[currency_to_convert].nil? || currency_to_convert == self.currency case currency_to_convert when "USD" obj_copy.amount = (obj_copy.amount * obj_copy.conversion['USD']).round(2) when "Bitcoin" obj_copy.amount = (obj_copy.amount * obj_copy.conversion['Bitcoin']).round(2) when "EUR" obj_copy.amount = (obj_copy.amount * obj_copy.conversion['EUR']).round(2) end obj_copy.currency = currency_to_convert return obj_copy end
inspect()
click to toggle source
# File lib/moneygm.rb, line 11 def inspect "#{@amount} #{@currency}" end