Class: MX::Banxico::WebServices::WebService

Inherits:
Object
  • Object
show all
Extended by:
Savon::Model
Defined in:
lib/MX/Banxico/web_services/web_service.rb

Overview

Note:

Savon crea métodos por omisión de acuerdo a las operaciones soportadas por el servicio web, tano a nivel de clase como de instancia.

Modelo para conectarse al servicio web de Banxico por medio de Savon::Model.

Direct Known Subclasses

TipoDeCambio

Defined Under Namespace

Classes: Respuesta

Constant Summary collapse

WSDL =

URL con la definición del servicio web.

"http://www.banxico.org.mx/DgieWSWeb/DgieWS?WSDL"
CODIFICACION_WS =

Codificación de la petición y respuesta del servicio ¡guácala, no es UTF-8 la codificación que manejan en Banxico!

"ISO-8859-1"
OPERACIONES_WS =

Operaciones soportadas por el servicio web de Banxico:

  • Reservas internacionales
  • Tasas de interés
  • Tipos de Cambio
  • UDIS
[ :reservas_internacionales_banxico, :tasas_de_interes_banxico, :tipos_de_cambio_banxico, :udis_banxico ]

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.init_clientObject

Inicializa el cliente de Savon.



59
60
61
# File 'lib/MX/Banxico/web_services/web_service.rb', line 59

def self.init_client
  client wsdl: WSDL, encoding: CODIFICACION_WS, open_timeout: 5, read_timeout: 5
end

.operacionesArray

Arreglo con las operaciones soportadas por el servicio web.

Returns:

  • (Array)

    un arreglo con las operaciones soportados.



95
96
97
# File 'lib/MX/Banxico/web_services/web_service.rb', line 95

def self.operaciones
  OPERACIONES_WS
end

Instance Method Details

#clientObject

Definición del cliente de Savon



# File 'lib/MX/Banxico/web_services/web_service.rb', line 53

#realizar_operacion(op, intentos = 5) ⇒ Hash

Realiza la operación solicitada en un máximo de intentos dados.

Parameters:

  • op (Symbol)

    el nombre de la operación soportada a efectuarse. Ver OPERACIONES_WS.

  • intentos (Fixnum) (defaults to: 5)

    el número de intentos en los que se tratará de recuperar la respuesta de la operación.

Returns:

  • (Hash)

    con el cuerpo de la respuesta de la operación en la llave :cuerpo o una descripción de los errores ocurridos en la llave :errores.

Raises:

  • (ArgumentError)


75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/MX/Banxico/web_services/web_service.rb', line 75

def realizar_operacion(op, intentos = 5)
  raise ArgumentError.new("La operación #{op} no está soportada.") unless OPERACIONES_WS.member?(op.to_sym)
  raise ArgumentError.new("El número de intentos debe ser mayor o igual a 1.") if (!intentos.is_a?(Integer) or intentos < 1)
  errores = ""
  1.upto(intentos) do |intento|
    begin
      resp = client.call(op.to_sym)
      return Respuesta.new(resp.body[:"#{op}_response"][:result]) if resp.success?
    rescue Exception => e
      errores = "#{errores}Intento #{intento}: #{e.message}. "
    end
    errores = "#{errores}Número de intentos agotados #{intentos}." if intento == intentos
  end
  Respuesta.new(nil, errores)
end