Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[review] each_with_progress メソッドを追加 #44

Merged
merged 2 commits into from
Apr 19, 2024

Conversation

tkawa
Copy link
Contributor

@tkawa tkawa commented Apr 18, 2024

find_each 以外でも find_each_with_progress を使いたいので、一般の enumerator/enumerable を受け取れるようにしました。
名前は each_with_progress のほうがわかりやすいかも?変更した。

@tkawa
Copy link
Contributor Author

tkawa commented Apr 18, 2024

なんかテスト落ちてるので直します。。
直したけど、テスト追加しないとダメですね。

一般のenumeratorを受け取れる。
@aki77
Copy link
Contributor

aki77 commented Apr 18, 2024

なんかテスト落ちてるので直します。。 直したけど、テスト追加しないとダメですね。

元々ちゃんとテスト用意されてる箇所で難しくないと思うしテスト追加よろですー。

if target_scope.is_a?(ActiveRecord::Batches)
target_scope.find_each
else
# ActiveRecord由来のfind_eachでないと思われる場合は明示的にenumeratorに変換
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これがテストのDekiru::DummyRecordで失敗しないようにするためだけだとしたら、テストの方を直すほうが正攻法な気がしました。
あとでこれ読んでも何のための考慮か理解するのが難しそうだし、実際の利用上はまず必要のない分岐だろうなーと。

Copy link
Contributor Author

@tkawa tkawa Apr 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@aki77
今までも find_each がないところで find_each を生やして使っている例があるんじゃないかと思って、テストを通すためもありますが互換性のためです。
仕様を
「target_scopeは『ブロック引数がなければenumeratorを返す』find_eachメソッドを持つ」
に変更するのであればテストもそのように変更しますがそれでいいですか?
(実際のところ分岐せず常に target_scope.enum_for(:find_each) としても問題なさそうですが)

https://github.com/search?q=org%3ASonicGarden+find_each_with_progress&type=code
https://github.com/SonicGarden/planet-producttimes/blob/792fd05ff22880c4816e6aa59b20f540e8e1f8d3/scripts/lib/import_jicfs_codes.rb#L16
https://github.com/SonicGarden/aelz/blob/07bae8c1c1e5a57cf981ba652f788e92bf217a12/script/maintenance/20240206_import_tour_resources.rb#L9
ざっと探すと2例ですがどちらもenumeratorを返すので動作はしそう。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほどー。
手動実行用のスクリプトでしか使わない処理だし、gemの更新案内見逃したとしてもエラーで落ちたら新しいメソッド使うように書き換えればいいだけなので、わざわざ古い仕様を維持する必要はないかなーと思いました。

lib/dekiru/data_migration_operator.rb Outdated Show resolved Hide resolved
@tkawa tkawa changed the title [review] with_progress メソッドを追加 [review] each_with_progress メソッドを追加 Apr 19, 2024
従来の find_each_with_progress の引数 target_scope が持つ find_each メソッドは「ブロック引数がなければ enumerator を返さなければならない」に変更。
@tkawa
Copy link
Contributor Author

tkawa commented Apr 19, 2024

@aki77
テストを追加修正しましたが、どうでしょう。

@aki77 aki77 merged commit 6d0655f into master Apr 19, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants