Class: MX::Banxico::TipoDeCambio
- Inherits:
-
Object
- Object
- MX::Banxico::TipoDeCambio
- 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
-
#fecha ⇒ Object
readonly
!@attribute [r] fecha @return [Date] la fecha del tipo de cambio.
-
#moneda ⇒ Object
readonly
!@attribute [r] moneda @return [Symbol] el nombre de la moneda de origen.
-
#valor_en_mxn ⇒ Object
readonly
!@attribute [r] valor_en_mxn @return [Float] el importe en pesos mexicanos (MXN) del tipo de cambio.
Instance Method Summary collapse
-
#<=>(otro) ⇒ Integer
Compara
self
conotro
. -
#==(otro) ⇒ Boolean
Indica si
self
yotro
son iguales. -
#initialize(moneda, fecha, valor_en_mxn) ⇒ MX::Banxico::TipoDeCambio
constructor
Constructor.
-
#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. -
#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. -
#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. -
#to_s ⇒ String
La representación en cadena de la instancia.
Constructor Details
#initialize(moneda, fecha, valor_en_mxn) ⇒ MX::Banxico::TipoDeCambio
Constructor.
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
#fecha ⇒ Object (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 |
#moneda ⇒ Object (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_mxn ⇒ Object (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
.
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.
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.
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.
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.
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_s ⇒ 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 |