Как переключить 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 не устанавливается, когда я вызываю его из метода, как я могу заставить его работать?
Ответы
Ответ 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 для всех запросов, что, вероятно, не является тем, что вы хотите. Это, безусловно, небезопасно.