Ruby によるインターコム用の配列のバッチ処理
概要
処理が必要なオブジェクトの配列があります。 API を介してサードパーティ システムにオブジェクトを送信する必要がありますが、一度に送信できるオブジェクトは 100 個までです。
このようなオブジェクトの配列があるとします。
myUserArray = [{first_name: 'Jon', last_name: 'Snow'}, {first_name: 'Sansa', last_name: 'Stark'}...]
最終的にはこれをこのようにAPIに送信します
intercom.users.submit_bulk_job(create_items: myUserArray)
これは、オブジェクトの数が 100 未満の場合は正常に機能しますが、オブジェクトの数が 100 を超えると、レート制限によりエラーがスローされます。これは十分に公平です。処理するオブジェクトが 5000 個あるため、すべてが完了するまで myUserArray を 100 個のチャンクにバッチ処理する方法が必要です。アドバイスをいただければ幸いです。
解決策
Enumerable#each_slice が役に立ちます。
myUserArray.each_slice(100) do |slice|
intercom.users.submit_bulk_job(create_items: slice)
end