一言で言うと
orthoses-paranoiaを作った。
背景
以下のようなARコードがあったとして、with_deletedの型が分からないので後のコードが全てuntypedになってしまう問題があった。
User.with_deleted.comments.where(...) # ↑ここはUser型 # ↑ここはUser::ActiveRecord_Relation型であってほしい # しかし現状メソッドの定義がなくuntyped
このwith_deleted
はparanoiaで生えてくるメソッドで、中身は簡略化すると極単純なものだ。
def with_deleted unscope where: paranoia_column end
返り値はUser::ActiveRecord_Relation
だったりComment::ActiveRecord_Relation
だったりと、使用するモデルによって変わる。
RBSはこういうRailsによくあるパターンが不得意だと思っていて、解決策としてorthosesを設計したのだった。
orthosesの拡張として実装することで「acts_as_paranoid
が呼ばれたモデルに対して所定のメソッドを追加する」というコードを素直に書いて、paranoiaに対応できた。
orthoses-railsにがっつり依存しているが、それだけに考えることが少なくて済む。orthoses便利。