faraday_booleanとは?
URLのレスポンスが "true"
や "false"
といった文字列の場合に、それをRubyの true
や false
1 に変換するための faraday 拡張です。
作った経緯
当時とあるAPIのクライアントgemを仕事で作っていました。
ほとんどのAPIのレスポンスはjsonなので faraday_middleware のjsonのparserを使っていたのですが、一部のAPIだけがbodyで true
と false
を返してそれをjsonをしてparseしようとエラーになりました
イメージ的にはこんな感じ。
$ curl http://example.com/boolean/true
true
ちなみに僕が扱ってたAPIではレスポンスが false
の場合でもステータスコードは200 OKを返していました。
faradayでこのようなbooleanレスポンスをいい感じに扱うために作ったgemがfaraday_booleanです。
使い方
require "faraday_boolean"
connection =
Faraday.new(url: "http://example.com") do |conn|
conn.response :boolean
conn.adapter Faraday.default_adapter
end
res = connection.get("/boolean/true")
res.body
#=> true
res.body.class
#=> TrueClass
上記のように conn.response
に :boolean
を渡せばbodyがtrueかfalseだった時にRubyのtrue
や false
(文字列じゃなくてリテラルの方)で返ります。もちろんGET以外にもPOST, PUT, DELETEでも問題ないです
こういうのきっと誰か作ってるだろうと思ったのですが探してもなかったので自分で作ってます。
ちなみにfaraday_booleanを使わなかった場合はこんな感じです。
connection =
Faraday.new(url: "http://example.com") do |conn|
# conn.response :boolean
conn.adapter Faraday.default_adapter
end
res = connection.get("/boolean/true")
res.body
#=> "true"
res.body.class
#=> String
ソースコードはコメント込でたった17行。true
と false
の完全一致でチェックしてるので誤爆しようがないはず。。。
https://github.com/sue445/faraday_boolean/blob/v0.1.0/lib/faraday_boolean/parse_boolean.rb
-
厳密には
TrueClass
とFalseClass
のインスタンス ↩