Question

J'essaie de passer un paramètre à un login méthode et je souhaite changer l’URI de base en fonction de ce paramètre.

Ainsi:

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

  ...

L'uri de base n'est pas défini lorsque je l'appelle à partir d'une méthode, comment puis-je faire fonctionner cela ?

Était-ce utile?

La solution

Dans HTTPParty, base_uri est un méthode de classe qui définit un hachage d’options internes.Pour le modifier dynamiquement depuis votre méthode de classe personnalisée login vous pouvez simplement l'appeler comme méthode (sans l'attribuer comme s'il s'agissait d'une variable).

Par exemple, en modifiant votre code ci-dessus, cela devrait définir base_uri comme prévu :

...
case game_name
  when "game1"
    # call it as a method
    self.base_uri "http://game1"
...

J'espère que cela aide.

Autres conseils

Je ne peux pas encore commenter, voici donc une extension de la réponse d’Estanislau Trepat.

Pour définir le base_uri pour tous vos appels, appelez la méthode de classe correspondante :

self.base_uri "http://api.yourdomain.com"

Si vous souhaitez avoir un moyen d'envoyer seulement quelques appels vers un URI différent et évitez les erreurs d'état (oublier de revenir à l'URI d'origine), vous pouvez utiliser l'assistant suivant :

def self.for_uri(uri)
  current_uri = self.base_uri
  self.base_uri uri
  yield
  self.base_uri current_uri
end

Avec l'assistant ci-dessus, vous pouvez effectuer des appels spécifiques vers d'autres URI comme les suivants :

for_uri('https://api.anotheruri.com') do
  # your httparty calls to another URI
end

Je ne suis pas certain qu'il ait été implémenté lorsque cette question a été posée pour la première fois, mais si vous souhaitez définir ou remplacer :base_uri sur une base par requête ou par instance, méthodes de requête HTTParty (:get, :post, etc.) accepter les options pour remplacer les options de classe.

Donc, pour l'exemple d'OP, cela pourrait ressembler à ceci :

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

L'appel dynamique de la méthode de classe, comme suggéré dans certaines des autres réponses, modifie le base_uri pour tous demandes, ce qui n'est probablement pas ce que vous souhaitez.Ce n'est certainement pas thread-safe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top