class MX::Banxico::WebServices::TipoDeCambio

Modelo para conectarse al servicio web de Banxico y obtener los tipos de cambio vigentes al día de hoy.

Esta clase hereda de {MX::Banxico::WebServices::WebService} para especializarse en la recuperación de los tipos de cambio.

Constants

TIPOS_DE_CAMBIO

Tipos de cambio soportados.

Public Instance Methods

obtener(tipo, intentos = 5) click to toggle source

Obtiene el tipo de cambio del día.

@param tipo [Symbol] el tipo de cambio deseado. Ver {TIPOS_DE_CAMBIO}. @param intentos [Ingeger] el número de intentos para obtener el tipo de cambio.

@return [MX::Banxico::TipoDeCambio] si la petición es exitosa, la estructura con el tipo de cambio. @return [String] si la petición no es exitosa, una cadena con la descripción del error.

@raise [ArgumentError] cuando el tipo dado no está soportado. Ver {TIPOS_DE_CAMBIO}.

# 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

Private Instance Methods

procesar_nodo_obs_tipo_de_cambio(nodo_valor, tipo) click to toggle source

Procesa el nodo del XML de la respuesta de la petición que contiene la información del tipo de cambio.

@param nodo_valor [Nokogiri::XML::Node] nodo de la serie con el valor y fecha del tipo de cambio (bm:Obs). @param tipo [Symbol] el tipo de cambio solicitado. Ver {TIPOS_DE_CAMBIO}.

@return [MX::Banxico::TipoDeCambio] si la obtención del valor y la fecha es exitosa, la estructura con el tipo de cambio. @return [String] si la obtención del valor y la fecha no es exitosa, una cadena con la descripción del error.

# 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.message}"
  end
end
xpath_tipo_de_cambio(tipo) click to toggle source

XPath con la ruta del nodo `bm:Obs` del identificador de la serie de acuerdo a su tipo.

@param tipo [Symbol] el tipo de cambio solicitado. Ver {TIPOS_DE_CAMBIO}.

@return [String] la ruta (XPath) del nodo de la serie de acuerdo al tipo dado.

# 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