Class: MX::Banxico::WebServices::TipoDeCambio
- Inherits:
-
WebService
- Object
- WebService
- MX::Banxico::WebServices::TipoDeCambio
- Defined in:
- lib/MX/Banxico/web_services/tipo_de_cambio.rb
Overview
Modelo para conectarse al servicio web de Banxico y obtener los tipos de cambio vigentes al día de hoy.
Esta clase hereda de WebService para especializarse en la recuperación de los tipos de cambio.
Constant Summary collapse
- TIPOS_DE_CAMBIO =
Tipos de cambio soportados.
MX::Banxico::Series.tipos_de_cambio.keys.dup.freeze
Constants inherited from WebService
WebService::CODIFICACION_WS, WebService::OPERACIONES_WS, WebService::WSDL
Instance Method Summary collapse
-
#obtener(tipo, intentos = 5) ⇒ MX::Banxico::TipoDeCambio, String
Obtiene el tipo de cambio del día.
-
#operations ⇒ Object
Operaciones soportadas en este web service via Savon.
-
#procesar_nodo_obs_tipo_de_cambio(nodo_valor, tipo) ⇒ MX::Banxico::TipoDeCambio, String
private
Procesa el nodo del XML de la respuesta de la petición que contiene la información del tipo de cambio.
-
#xpath_tipo_de_cambio(tipo) ⇒ String
private
XPath con la ruta del nodo
bm:Obs
del identificador de la serie de acuerdo a su tipo.
Methods inherited from WebService
#client, init_client, operaciones, #realizar_operacion
Instance Method Details
#obtener(tipo, intentos = 5) ⇒ MX::Banxico::TipoDeCambio, String
Obtiene el tipo de cambio del día.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/MX/Banxico/web_services/tipo_de_cambio.rb', line 32 def obtener(tipo, intentos = 5) raise ArgumentError.new("El tipo de cambio no está soportado (#{tipo}).") unless TIPOS_DE_CAMBIO.member?(tipo.to_sym) respuesta = realizar_operacion(:tipos_de_cambio_banxico, intentos) if respuesta.errores? return respuesta.errores else xml_doc_cuerpo_respuesta = Nokogiri::XML(respuesta.cuerpo, nil, CODIFICACION_WS ) nodo_valor = xml_doc_cuerpo_respuesta.root.at_xpath(xpath_tipo_de_cambio(tipo)) if nodo_valor tdc_o_error = procesar_nodo_obs_tipo_de_cambio(nodo_valor, tipo) return tdc_o_error else return "No fue posible extraer los valores del XML del nodo bm:Obs al consultar el servicio web." + " Operación: #{:tipos_de_cambio_banxico}. XPath: #{xpath_tipo_de_cambio(tipo)}." + "\n\n #{respuesta.cuerpo}" end end end |
#operations ⇒ Object
Operaciones soportadas en este web service via Savon.
19 |
# File 'lib/MX/Banxico/web_services/tipo_de_cambio.rb', line 19 operations :tipos_de_cambio_banxico |
#procesar_nodo_obs_tipo_de_cambio(nodo_valor, tipo) ⇒ MX::Banxico::TipoDeCambio, String (private)
Procesa el nodo del XML de la respuesta de la petición que contiene la información del tipo de cambio.
63 64 65 66 67 68 69 |
# File 'lib/MX/Banxico/web_services/tipo_de_cambio.rb', line 63 def procesar_nodo_obs_tipo_de_cambio(nodo_valor, tipo) begin return MX::Banxico::TipoDeCambio.new(tipo, nodo_valor[:TIME_PERIOD], nodo_valor[:OBS_VALUE]) rescue ArgumentError => e return "Error al crear el tipo de cambio a partir del nodo bm:Obs. Error: #{e.}" end end |
#xpath_tipo_de_cambio(tipo) ⇒ String (private)
XPath con la ruta del nodo bm:Obs
del identificador de la serie de acuerdo a su tipo.
77 78 79 80 |
# File 'lib/MX/Banxico/web_services/tipo_de_cambio.rb', line 77 def xpath_tipo_de_cambio(tipo) id = MX::Banxico::Series.identificador(:tipos_de_cambio, tipo) %Q{bm:DataSet/bm:Series[@IDSERIE="#{id}"]/bm:Obs} end |