Base_uri を httpparty に切り替える方法
質問
パラメータをに渡そうとしています 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 が設定されません。どうすれば機能しますか?
解決
HTTPPartyでは、 base_uri
です クラスメソッド これは内部オプションのハッシュを設定します。カスタム クラス メソッド内から動的に変更するには login
単にメソッドとして呼び出すことができます (変数のように割り当てるのではありません)。
たとえば、上記のコードを変更すると、次のように設定されます。 base_uri
ご想像のとおり:
...
case game_name
when "game1"
# call it as a method
self.base_uri "http://game1"
...
それが役に立てば幸い。
他のヒント
まだコメントできないので、Estanislau Trepat の回答の拡張をここに示します。
設定するには、 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
この質問が最初に尋ねられたときに実装されたかどうかはわかりませんが、設定またはオーバーライドしたい場合は :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が変更されます。 全て これはおそらくあなたが望んでいることではありません。確かにスレッドセーフではありません。