paranoia gem用の型を生成する

一言で言うと

orthoses-paranoiaを作った。

背景

以下のようなARコードがあったとして、with_deletedの型が分からないので後のコードが全てuntypedになってしまう問題があった。

User.with_deleted.comments.where(...)
#  ↑ここはUser型
#               ↑ここはUser::ActiveRecord_Relation型であってほしい
#                しかし現状メソッドの定義がなくuntyped

このwith_deletedparanoiaで生えてくるメソッドで、中身は簡略化すると極単純なものだ。

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便利。