ActiveSupportのRange拡張
active_support/core_ext/range/ 以下をざっとみてみた。
include_with_range.rb
Range#include_with_range?(val)はvalがRangeじゃなかったら単純にincludeしてるかを
判断し、Rangeだった場合はレシーバの範囲内に収まっているかどうかを検証する。
irb(main):005:0> require "active_support/core_ext/range" => [] irb(main):007:0> (1..10).include_with_range?(3) => true irb(main):008:0> (1..10).include_with_range?(11) => false irb(main):009:0> (1..10).include_with_range?(2..9) => true irb(main):010:0> (1..10).include_with_range?(2..11) => false irb(main):011:0> (1..10).include_with_range?(0..11) => false
overlaps.rb
Range#overlaps?(val)はvalがレシーブの一部にでも含まれているかどうかを検証する。
irb(main):015:0> (1..10).overlaps?(9..11) => true irb(main):016:0> (1..10).overlaps?(2..10) => true irb(main):017:0> (1..10).overlaps?(11..12) => false
conversions.rb
これはどの拡張クラスにもつくみたい。
Range#to_formatted_s(format=:default)はformat=:defaultでRangeのto_sをそのまま呼ぶ。
format=:dbを指定した場合Procが呼ばれてDBに問い合わせる文字列が帰る。
irb(main):004:0> (1..10).to_formatted_s => "1..10" irb(main):003:0> require "active_support/time" => true irb(main):004:0> date_range = Date.new(2012,8,16)..Date.new(2012,8,20) => Thu, 16 Aug 2012..Mon, 20 Aug 2012 irb(main):009:0> date_range.to_s(:db) => "BETWEEN '2012-08-16' AND '2012-08-20'" irb(main):010:0> date_range.to_formatted_s(:db) => "BETWEEN '2012-08-16' AND '2012-08-20'"