公式ドキュメント
https://github.com/lostisland/faraday/blob/main/UPGRADING.md
具体的な対応内容
faraday v0系とv1系は共存できたんですが、v2系はプラグイン周りに大きな変更があった関係でそれまでのバージョンと共存できなかったので拙作のAPIクライアントgemに関してもfaraday v2系未満のサポートを切ってメジャーバージョンアップを行いました。
faraday v2系でRuby 2.6系未満のサポートが切られてるので必然的に自分のgemでもRuby 2.6未満のサポートを切っています。
faraday_boolean v1.0.0
pixela v3.0.0, prismdb-ruby v1.0.0, chatwork-ruby v1.0.0
- https://github.com/sue445/pixela/blob/master/CHANGELOG.md#v300
- https://github.com/sue445/prismdb-ruby/blob/master/CHANGELOG.md#v100
- https://github.com/asonas/chatwork-ruby/blob/master/CHANGELOG.md#v100
いずれのgemもmashify(普通のHashを ActiveSupport::HashWithIndifferentAccess
のようなメソッドアクセスできるいい感じのHashにするやつ)を使ってたのですが、mashifyが組み込まれてる faraday_middleware がfaraday v2系だと非推奨になって対応をどうするちょっと困りました。(gemspecに ~> 1.0
が書かれてるのでv2系と共存もできない *1 )
v2系だとfaraday_middlewareに組み込まれてたプラグインは各gemに分割される方針になってるようなのでfaraday-mashifyというgemがあるかと思いきやなかったのでIssueで聞いてみました。
そうしたらfaradayのメンテナから
We welcome people who would like to create and maintain them though, it doesn't have to be us!
という返事をもらったので自分でfaraday-mashifyを作り、自分のgemに組み込んで今回の対応を行いました。
その他地味にハマったところ
faraday v2対応時にテストコードが軒並みコケて調べたところ、レスポンスヘッダのContent-Typeが正しく設定されていないと response :json
が動かなくて *2 地味にハマりました...
普通にWeb APIを叩いたらContent-Typeにjsonが入らないというのはまず無いはずなんですが、自分のテストコードだと webmock で外部通信部分をスタブにしていてスタブ側でContent-Typeを設定してなくてテストコードが軒並みコケていたというオチでした、、、
実際の対応内容 https://github.com/sue445/pixela/pull/91/commits/2adf922689b023fd458f6293f04c7e4b5b5b01fa