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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top