3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

sue445Advent Calendar 2016

Day 16

faradayの雑な拡張「faraday_boolean」

Posted at

faraday_booleanとは?

URLのレスポンスが "true""false" といった文字列の場合に、それをRubyの truefalse 1 に変換するための faraday 拡張です。

作った経緯

当時とあるAPIのクライアントgemを仕事で作っていました。

ほとんどのAPIのレスポンスはjsonなので faraday_middleware のjsonのparserを使っていたのですが、一部のAPIだけがbodyで truefalse を返してそれをjsonをしてparseしようとエラーになりました :cry:

イメージ的にはこんな感じ。

$ 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のtruefalse (文字列じゃなくてリテラルの方)で返ります。もちろん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行。truefalse の完全一致でチェックしてるので誤爆しようがないはず。。。
https://github.com/sue445/faraday_boolean/blob/v0.1.0/lib/faraday_boolean/parse_boolean.rb

  1. 厳密には TrueClassFalseClass のインスタンス

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?