Подтвердить что ты не робот

Как переключить base_uri с httparty

Я пытаюсь передать параметр методу login, и я хочу переключить базовый uri на основе этого параметра.

Так же:

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

  ...

Базовый uri не устанавливается, когда я вызываю его из метода, как я могу заставить его работать?

4b9b3361

Ответ 1

В HTTParty, base_uri - это метод класса, который устанавливает хэш внутренних параметров. Чтобы динамически изменить его из вашего метода пользовательского класса login, вы можете просто назвать его как метод (не присваивая его, как если бы он был переменной).

Например, изменив код выше, это должно установить base_uri, как вы ожидаете:

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

Надеюсь, что это поможет.

Ответ 2

Я до сих пор не могу прокомментировать, так что она говорит о продолжении ответа Estanislau Trepats.

Чтобы установить base_uri для всех ваших вызовов, вызовите метод класса:

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

Если вы хотите отправить только несколько вызовов на другой URI и избежать ошибок состояния (забыв вернуться к исходному URI), вы можете использовать следующий помощник:

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

С помощью указанного помощника вы можете совершать определенные вызовы для других URI, например:

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

Ответ 3

Я не уверен, что это было реализовано, когда этот вопрос был впервые задан, но если вы хотите установить или переопределить :base_uri для каждого запроса или для каждого экземпляра, методы запроса HTTParty (: get,: post, и т.д.) принять параметры для переопределения параметров класса.

Итак, для примера OP это может выглядеть примерно так:

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

Динамический вызов метода класса, как это предлагается в некоторых других ответах, изменяет base_uri для всех запросов, что, вероятно, не является тем, что вы хотите. Это, безусловно, небезопасно.