会社が提供するサービスの REST API クライアントとして機能する gem を作成しています。
そのために、APIChannel
のパスと対話する手段として機能するクラスがあります。実際の HTTP 呼び出し/channels
に使用されます。HTTParty
このクラスには create というメソッドがあり、必要な属性を持つ Channel インスタンスを POST します。
メソッドは次のようになります。
def create
body = { external_id: external_id,
name: name,
description: description }
action = post "/", body
case action.response.class
when Net::HTTPAccepted then return action
when Net::HTTPNotAcceptable then raise HTTPNotAcceptable
else raise "Server responded with " + Net::HTTPResponse::CODE_TO_OBJ[action.response.code].to_s
end
end
このpost
メソッドは、ボディ ハッシュを JSON に変換し、認証やその他の属性を実際のHTTParty
呼び出しに付加する抽象化です。
これは動作しません。応答が の場合でも202
、このcase
ステートメントは常にelse
条件に該当します。応答が正しいことを確認するためpry
に、呼び出しの後にセッションを添付しました。post
38: def create
39: body = { external_id: external_id,
40: name: name,
41: description: description }
42: action = post "/", body
=> 43: case action.response.class
44: when Net::HTTPAccepted then return action
45: when Net::HTTPNotAcceptable then raise HTTPNotAcceptable
46: else raise "Server responded with " + Net::HTTPResponse::CODE_TO_OBJ[action.response.code].to_s
47: end
48: end
[1] (pry) #<ZynkApi::Channel>: 0> action.response.class
=> Net::HTTPAccepted
しかし、それはまだ当てはまりますelse
:
[1] (pry) #<ZynkApi::Channel>: 0> action.response.class
=> Net::HTTPAccepted
[2] (pry) #<ZynkApi::Channel>: 0> n
From: /Users/cassiano/projects/Zynk/src/zynk_api/lib/zynk_api/channel.rb @ line 38 ZynkApi::Channel#create:
38: def create
39: body = { external_id: external_id,
40: name: name,
41: description: description }
42: action = post "/", body
43: case action.response.class
44: when Net::HTTPAccepted then return action
45: when Net::HTTPNotAcceptable then raise HTTPNotAcceptable
=> 46: else raise "Server responded with " + Net::HTTPResponse::CODE_TO_OBJ[action.response.code].to_s
47: end
48: end