自作の gem の名前を考えるのは難しい
自作の gem の名前を変えたい。
my_api_client
という自作の gem がありまして、このブログでは何度も紹介している んですが、ニッチすぎるのか宣伝が下手すぎるのか、一向に使ってみた、という噂を聞きません (´・ω・`)
まあ弊社のプロダクトの中ではガッツリ使ってるんで別にそれは良いんですが、もう少しまともな名前にならんのかね、というコメントを頂きます。 いい機会だしちゃんと良い名前付けようと思って考えました。どうせなら自分が好きなゲームからいい名前付けたいな、と思って『Luida(ルイーダ)』という名前が浮かびました。ドラクエ III のあれです。
my_api_client
は API Client を簡単に作ったりテストしたりするための gem なので、冒険者を登録して一緒に旅するルイーダの店のイメージがピッタリだなーと思ったんですよね。とはいえ gem の名前を変えるのって面倒だしそのうちやろう、って思ってたら半年くらい経っちゃいましたけどね。上のルイーダの店の画像ってわざわざ iPhone 版のドラクエIII 買ってスクショ撮ったんですが、その日付が 2020/10/04 でした 😇
多分そのうちやります(フラグ)
my_api_client v0.20.0 をリリースしました 🚀
gem の名前は変わらないけどアップデートはされていく。
元々 my_api_client
には #pageable_get
(alias: #pget
) というメソッドがあり、REST API のレスポンス JSON に含まれる URL を順に辿ってリクエストする Enumerator
を取得することが出来ます。機能自体は実相してテストもしてあるものの、実際のプロダクトで使う機会がなく長いこと日の目を見なかったんですが、この度ついに弊プロダクトで利用する機会が訪れたのでチームのエンジニアに使ってもらってるんですが、 RSpec を書く際のスタブ化が特にサポートされていなくてテストしづらい問題がありました。
今回のアップデートでは、この #pageable_get
に対応するスタブ化をサポートしています。 詳しい解説は README.jp.md にも書いた んですが、せっかくなのでブログにも転記しておきます。まあ文章で説明されても実際に使ってみないとピンと来ないのはわかってますけどね。。。
#pageable_get
(#pget
) を使った実装用に pageable
というオプションが利用できます。
pageable
に設定する値は Enumerable
である必要があります。
stub_api_client_all( MyPaginationApiClient, pagination: { pageable: [ { page: 1 }, { page: 2 }, { page: 3 }, ], } ) MyPaginationApiClient.new.pagination.each do |response| response.page #=> 1, 2, 3 end
なお、 Enumerable
の各値にはここまで紹介した response
, raise
, Proc
など全てのオプションが利用可能です。
stub_api_client_all( MyPaginationApiClient, pagination: { pageable: [ { response: { page: 1 } }, { page: 2 }, ->(params) { { page: 3, user_id: params[:user_id] } }, { raise: MyApiClient::ClientError::IamTeapot }, ], } )
また、 Enumerator
を使えば無限に続くページネーションを定義することもできます。
stub_api_client_all( MyPaginationApiClient, pagination: { pageable: Enumerator.new do |y| loop.with_index(1) do |_, i| y << { page: i } end end, } )