Cómo cambiar base_uri con httparty
Pregunta
Estoy intentando pasar un parámetro a un login
método y quiero cambiar el uri base según ese parámetro.
Al igual que:
class Managementdb
include HTTParty
def self.login(game_name)
case game_name
when "game1"
self.base_uri = "http://game1"
when "game2"
self.base_uri = "http://game2"
when "game3"
self.base_uri = "http://game3"
end
response = self.get("/login")
if response.success?
@authToken = response["authToken"]
else
# this just raises the net/http response that was raised
raise response.response
end
end
...
El uri base no se establece cuando lo llamo desde un método, ¿cómo hago para que funcione?
Solución
En HTTParty, base_uri
es un método de clase que establece un hash de opciones interno.Para cambiarlo dinámicamente desde su método de clase personalizado login
puedes simplemente llamarlo como un método (sin asignarlo como si fuera una variable).
Por ejemplo, cambiando su código anterior, esto debería establecer base_uri
como esperas:
...
case game_name
when "game1"
# call it as a method
self.base_uri "http://game1"
...
Espero eso ayude.
Otros consejos
No puedo comentar todavía, así que aquí hay una extensión de la respuesta de Estanislau Trepat.
Para configurar el base_uri
para todas tus llamadas, llame al método de clase correspondiente:
self.base_uri "http://api.yourdomain.com"
Si quieres tener una forma de enviar sólo unas pocas llamadas a un URI diferente y evitar errores de estado (olvidándose de volver al URI original), puede utilizar la siguiente ayuda:
def self.for_uri(uri)
current_uri = self.base_uri
self.base_uri uri
yield
self.base_uri current_uri
end
Con la ayuda anterior, puede realizar llamadas específicas a otros URI como los siguientes:
for_uri('https://api.anotheruri.com') do
# your httparty calls to another URI
end
No estoy seguro de que se implementó cuando se solicitó esta pregunta, pero si desea establecer o anular :base_uri
en una base por solicitud o por instancia, Httparty Solicite métodos (: Obtenga, etc.) Aceptar opciones para anular las opciones de clase.
Así que para el ejemplo de OP, podría parecer algo así:
class Managementdb
include HTTParty
# If you wanted a default, class-level base_uri, set it here:
base_uri "http://games"
def self.login(game_name)
base_uri =
case game_name
when "game1" then "http://game1"
when "game2" then "http://game2"
when "game3" then "http://game3"
end
# To override base_uri for an individual request, pass
# it as an option:
response = get "/login", base_uri: base_uri
# ...
end
end
Llamando a la clase Método dinámicamente, como se sugiere en algunas de las otras respuestas, cambia el BASE_URI para las solicitudes todas , que probablemente no sea lo que desea.Ciertamente no es seguro.