Class: MX::Banxico::TipoDeCambio

Inherits:
Object
  • Object
show all
Defined in:
lib/MX/Banxico/tipo_de_cambio.rb

Overview

Estructura para guardar el tipo de cambio de una fecha.

Constant Summary collapse

FECHA_EX_MSG =

Mensaje para la excepción al convertir la fecha.

"fecha debe ser una cadena (String) en formato ISO-8601 o un objeto de tipo fecha (Date)."
VALOR_EN_MXN_EX_MSG =

Mensaje para la excepción al convertir el valor en pesos.

"valor_en_mxn debe ser una cadena con un número decimal o un objeto de tipo (Float)."

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(moneda, fecha, valor_en_mxn) ⇒ MX::Banxico::TipoDeCambio

Constructor.

Parameters:

  • moneda (String, Symbol)

    el nombre de la moneda de origen.

  • fecha (String, Date)

    la fecha del tipo de cambio. Cuando es una cadena debe estar en formato ISO-8601.

  • valor_en_mxn (String, Float)

    el importe en pesos mexicanos (MXN) del tipo de cambio.

Raises:

  • (ArgumentError)

    cuando alguno de los parámetros no es valido.



30
31
32
33
34
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 30

def initialize(moneda, fecha, valor_en_mxn)
  procesar_moneda(moneda)
  procesar_fecha(fecha)
  procesar_valor_en_mxn(valor_en_mxn)
end

Instance Attribute Details

#fechaObject (readonly)

!@attribute [r] fecha @return [Date] la fecha del tipo de cambio.



11
12
13
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 11

def fecha
  @fecha
end

#monedaObject (readonly)

!@attribute [r] moneda @return [Symbol] el nombre de la moneda de origen.



6
7
8
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 6

def moneda
  @moneda
end

#valor_en_mxnObject (readonly)

!@attribute [r] valor_en_mxn @return [Float] el importe en pesos mexicanos (MXN) del tipo de cambio.



16
17
18
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 16

def valor_en_mxn
  @valor_en_mxn
end

Instance Method Details

#<=>(otro) ⇒ Integer

Compara self con otro.

Parameters:

Returns:

  • (Integer)
    • 1 si self es mayor que otro
    • 0 si self es igual a otro
    • -1 si self es menor que otro


55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 55

def <=>(otro)
  if self == otro
    0
  elsif @moneda == otro.moneda
    if @fecha == otro.fecha
      @valor_en_mxn <=> otro.valor_en_mxn
    elsif @fecha < otro.fecha
      -1
    else
      1
    end
  elsif @moneda < otro.moneda
    -1
  else
    1
  end
end

#==(otro) ⇒ Boolean

Indica si self y otro son iguales.

Parameters:

Returns:

  • (Boolean)

    true si self es igual a otro, false de lo contrario.



80
81
82
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 80

def ==(otro)
  @moneda == otro.moneda && @fecha == otro.fecha && @valor_en_mxn == otro.valor_en_mxn
end

#procesar_fecha(fecha) ⇒ Object (private)

Verifica que la fecha sea del tipo adecuado y de ser posible, la convierte a un objeto de tipo fecha (Date) y asigna el valor a la variable fecha de la instancia.

Parameters:

  • fecha (String, Date)

    la fecha del tipo de cambio. Cuando es una cadena debe estar en formato ISO-8601.

Raises:

  • (ArgumentError)

    cuando no tiene el tipo o formato correcto el parámetro fecha.



123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 123

def procesar_fecha(fecha)
  if fecha.is_a?(Date)
    @fecha = fecha
  elsif fecha.is_a?(String)
    begin
      @fecha = Date.iso8601(fecha)
    rescue ArgumentError
      raise ArgumentError.new(FECHA_EX_MSG)
    end
  else
    raise ArgumentError.new(FECHA_EX_MSG)
  end
end

#procesar_moneda(moneda) ⇒ Object (private)

Verifica que la moneda sea del tipo adecuado y de ser posible, la convierte a un símbolo (Symbol) y asigna el valor a la variable moneda de la instancia.

Parameters:

  • moneda (String, Symbol)

    el nombre de la moneda de origen.

Raises:

  • (ArgumentError)

    cuando no tiene el tipo correcto el parámetro moneda.



104
105
106
107
108
109
110
111
112
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 104

def procesar_moneda(moneda)
  if moneda.is_a?(String)
    @moneda = moneda.to_sym
  elsif moneda.is_a?(Symbol)
    @moneda = moneda
  else
    raise ArgumentError.new("moneda debe ser una cadena (String) o un objeto tipo símbolo (Symbol).")
  end
end

#procesar_valor_en_mxn(valor_en_mxn) ⇒ Object (private)

Verifica que el valor en pesos mexicanos sea del tipo adecuado y de ser posible, lo convierte a un número flotante (Float) y asigna el valor a la variable valor_en_mxn de la instancia.

Parameters:

  • valor_en_mxn (String, Float)

    el importe en pesos mexicanos (MXN) del tipo de cambio.

Raises:

  • (ArgumentError)

    cuando no tiene el tipo o formato correcto el parámetro valor_en_mxn.



145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 145

def procesar_valor_en_mxn(valor_en_mxn)
  if valor_en_mxn.is_a?(Float)
    @valor_en_mxn = valor_en_mxn
  elsif valor_en_mxn.is_a?(String)
    if valor_en_mxn =~ /^\d+(\.\d+)?$/
      @valor_en_mxn = valor_en_mxn.to_f
    else
      raise ArgumentError.new(VALOR_EN_MXN_EX_MSG)
    end
  else
    raise ArgumentError.new(VALOR_EN_MXN_EX_MSG)
  end
end

#to_sString

La representación en cadena de la instancia.

Returns:

  • (String)

    La representación en cadena de la instancia.



41
42
43
# File 'lib/MX/Banxico/tipo_de_cambio.rb', line 41

def to_s
  "#{@moneda}: #{"$%.4f MXN" % @valor_en_mxn} al día #{@fecha.to_s}"
end