【Rails Code Reading 1回目】Add validate numericality in range #41022
今日からなんとなくやってみる。
rails/railsにmargeされたPRを軽く読み倒して、個人的な感想をまとめるやつ。
対象PR
今回はこれ。
ざっくり、ActiveModelのvalidationの1つである、numericalityに関するもの。
引数に、in
をkeyとしてvalueがRangeオブジェクトのハッシュを渡すことで、Rangeのvalidatetionを可能にする機能の追加である
ざっくり
validates :percentage, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 100 }
と書く必要があったのを、
validates :percentage, numericality: {in: 0..100 }
とかけるようになるらしい。 確かにこれは便利である。
実装方針
どうやっているか。 どうやら、ActiveModelをいじっている。Modelのバリデーション絡みの実装だから当たり前か。
NumericalityValidator:: CHECKS
にin: :in?
が追加実装されている。
むー。
あたりも色々触られている。
NumericalityValidator.check_validity!
で引数の型チェックみたいなことをしている。
では、ActiveModel
のバリデーションのメインの実装はどこだ。
おそらく、validate_each
メソッドっぽい。
この中身は、ほとんど実装が変わっていないが、たったこれだけでバリデーションが追加できるのか。
ActiveModelのライブラリとしての完成度の高さを伺えた。
あとでもう少し詳しく読んでみよう。
activemodel/lib/active_model/validations/numericality.rb