Method: Arel::Predications#between

Defined in:
activerecord/lib/arel/predications.rb

#between(other) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'activerecord/lib/arel/predications.rb', line 37

def between(other)
  if unboundable?(other.begin) == 1 || unboundable?(other.end) == -1
    self.in([])
  elsif open_ended?(other.begin)
    if open_ended?(other.end)
      if infinity?(other.begin) == 1 || infinity?(other.end) == -1
        self.in([])
      else
        not_in([])
      end
    elsif other.exclude_end?
      lt(other.end)
    else
      lteq(other.end)
    end
  elsif open_ended?(other.end)
    gteq(other.begin)
  elsif other.exclude_end?
    gteq(other.begin).and(lt(other.end))
  elsif other.begin == other.end
    eq(other.begin)
  else
    left = quoted_node(other.begin)
    right = quoted_node(other.end)
    Nodes::Between.new(self, Nodes::And.new([left, right]))
  end
end