class MX::Banxico::TipoDeCambio

Estructura para guardar el tipo de cambio de una fecha.

Constants

FECHA_EX_MSG

Mensaje para la excepción al convertir la fecha.

VALOR_EN_MXN_EX_MSG

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

Attributes

fecha[R]

!@attribute [r] fecha

@return [Date] la fecha del tipo de cambio.
moneda[R]

!@attribute [r] moneda

@return [Symbol] el nombre de la moneda de origen.
valor_en_mxn[R]

!@attribute [r] valor_en_mxn

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

Public Class Methods

new(moneda, fecha, valor_en_mxn) click to toggle source

Constructor.

@param moneda [String, Symbol] el nombre de la moneda de origen. @param fecha [String, Date] la fecha del tipo de cambio. Cuando es una cadena debe estar

en formato {http://www.iso.org/iso/home/standards/iso8601.htm ISO-8601}.

@param valor_en_mxn [String, Float] el importe en pesos mexicanos (MXN) del tipo de cambio.

@return [MX::Banxico::TipoDeCambio] una instancia de la clase.

@raise [ArgumentError] cuando alguno de los parámetros no es valido.

# 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

Public Instance Methods

<=>(otro) click to toggle source

Compara `self` con `otro`.

@param otro [MX::Banxico::TipoDeCambio] la instancia contra la que se realizará la comparación.

@return [Integer]

* `1` si `self` es mayor que `otro`
* `0` si `self` es igual a `otro`
* `-1` si `self` es menor que `otro`
# 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) click to toggle source

Indica si `self` y `otro` son iguales.

@param otro [MX::Banxico::TipoDeCambio] la instancia contra la que se realizará la comparación.

@return [Boolean] `true` si `self` es igual a `otro`, `false` de lo contrario.

# 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
to_s() click to toggle source

La representación en cadena de la instancia.

@return [String] La representación en cadena de la instancia.

# 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

Private Instance Methods

procesar_fecha(fecha) click to toggle source

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.

@param fecha [String, Date] la fecha del tipo de cambio. Cuando es una cadena debe estar

en formato {http://www.iso.org/iso/home/standards/iso8601.htm ISO-8601}.

@raise [ArgumentError] cuando no tiene el tipo o formato correcto el parámetro `fecha`.

# 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) click to toggle source

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.

@param moneda [String, Symbol] el nombre de la moneda de origen.

@raise [ArgumentError] cuando no tiene el tipo correcto el parámetro `moneda`.

# 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) click to toggle source

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.

@param valor_en_mxn [String, Float] el importe en pesos mexicanos (MXN) del tipo de cambio.

@raise [ArgumentError] cuando no tiene el tipo o formato correcto el parámetro `valor_en_mxn`.

# 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