ActiveRecordのRangeHandlerクラスとRubyの範囲メソッドRange#exclude_end?

こんにちは、hachi8833です。 先週のTechRacho記事「ActiveRecordで日付・時刻の範囲検索をシンプルに書く方法 」の続きです。 先週の記事 のレビュー中に、弊社CTOのbaba さんからチェックが飛んできました。 Range#exclude_end? は、RailsではなくRubyのコア機能です。 また、Webチーム筆頭エンジニア morimorihoge さんから「ここを見るといいよ」と、Active Record Rangeオブジェクトで文字どおり範囲を扱っているRangeHandlerクラス のパスを投げてもらいました。 Range#exclude_end? まずはRange#exclude_end?の公式ドキュメントを参照してみます。範囲の終端値を含む場合にtrueを返します。 Returns true if the range excludes its end value. (class Range – Documentation for Ruby 2.3.0) Rubyのドキュメントはつい日本語版 を参照していましたが、英語版はコードサンプルに加えて、クリックするとソースも表示されて具合がいいですね。 以下はドキュメントのサンプルそのままですが、こんな感じで使われます。 (1..5).exclude_end? #=> false (1…5).exclude_end? #=> true RangeHandler::call 続いてActiveRecordのRangeHandlerクラスのcallメソッドを見てみます(ActiveRecord v5.0.0.1)。 module ActiveRecord class PredicateBuilder class RangeHandler # :nodoc: RangeWithBinds = Struct.new(:begin, … Continue reading ActiveRecordのRangeHandlerクラスとRubyの範囲メソッドRange#exclude_end?