module Arel::Predications - arel-4.0.2 Documentation

# module Arel::Predications

### Public Instance Methods

does_not_match(other) click to toggle source

    # File lib/arel/predications.rb, line 107
    def does_not_match other
      Nodes::DoesNotMatch.new self, other
    end

does_not_match_all(others) click to toggle source

    # File lib/arel/predications.rb, line 115
    def does_not_match_all others
      grouping_all :does_not_match, others
    end

does_not_match_any(others) click to toggle source

    # File lib/arel/predications.rb, line 111
    def does_not_match_any others
      grouping_any :does_not_match, others
    end

eq(other) click to toggle source

    # File lib/arel/predications.rb, line 15
    def eq other
      Nodes::Equality.new self, other
    end

eq_all(others) click to toggle source

    # File lib/arel/predications.rb, line 23
    def eq_all others
      grouping_all :eq, others
    end

eq_any(others) click to toggle source

    # File lib/arel/predications.rb, line 19
    def eq_any others
      grouping_any :eq, others
    end

gt(right) click to toggle source

    # File lib/arel/predications.rb, line 131
    def gt right
      Nodes::GreaterThan.new self, right
    end

gt_all(others) click to toggle source

    # File lib/arel/predications.rb, line 139
    def gt_all others
      grouping_all :gt, others
    end

gt_any(others) click to toggle source

    # File lib/arel/predications.rb, line 135
    def gt_any others
      grouping_any :gt, others
    end

gteq(right) click to toggle source

    # File lib/arel/predications.rb, line 119
    def gteq right
      Nodes::GreaterThanOrEqual.new self, right
    end

gteq_all(others) click to toggle source

    # File lib/arel/predications.rb, line 127
    def gteq_all others
      grouping_all :gteq, others
    end

gteq_any(others) click to toggle source

    # File lib/arel/predications.rb, line 123
    def gteq_any others
      grouping_any :gteq, others
    end

in(other) click to toggle source

    # File lib/arel/predications.rb, line 27
    def in other
      case other
      when Arel::SelectManager
        Arel::Nodes::In.new(self, other.ast)
      when Range
        if other.begin == -Float::INFINITY && other.end == Float::INFINITY
          Nodes::NotIn.new self, []
        elsif other.end == Float::INFINITY
          Nodes::GreaterThanOrEqual.new(self, other.begin)
        elsif other.begin == -Float::INFINITY && other.exclude_end?
          Nodes::LessThan.new(self, other.end)
        elsif other.begin == -Float::INFINITY
          Nodes::LessThanOrEqual.new(self, other.end)
        elsif other.exclude_end?
          left  = Nodes::GreaterThanOrEqual.new(self, other.begin)
          right = Nodes::LessThan.new(self, other.end)
          Nodes::And.new [left, right]
        else
          Nodes::Between.new(self, Nodes::And.new([other.begin, other.end]))
        end
      else
        Nodes::In.new self, other
      end
    end

in_all(others) click to toggle source

    # File lib/arel/predications.rb, line 56
    def in_all others
      grouping_all :in, others
    end

in_any(others) click to toggle source

    # File lib/arel/predications.rb, line 52
    def in_any others
      grouping_any :in, others
    end

lt(right) click to toggle source

    # File lib/arel/predications.rb, line 143
    def lt right
      Nodes::LessThan.new self, right
    end

lt_all(others) click to toggle source

    # File lib/arel/predications.rb, line 151
    def lt_all others
      grouping_all :lt, others
    end

lt_any(others) click to toggle source

    # File lib/arel/predications.rb, line 147
    def lt_any others
      grouping_any :lt, others
    end

lteq(right) click to toggle source

    # File lib/arel/predications.rb, line 155
    def lteq right
      Nodes::LessThanOrEqual.new self, right
    end

lteq_all(others) click to toggle source

    # File lib/arel/predications.rb, line 163
    def lteq_all others
      grouping_all :lteq, others
    end

lteq_any(others) click to toggle source

    # File lib/arel/predications.rb, line 159
    def lteq_any others
      grouping_any :lteq, others
    end

matches(other) click to toggle source

    # File lib/arel/predications.rb, line 95
    def matches other
      Nodes::Matches.new self, other
    end

matches_all(others) click to toggle source

    # File lib/arel/predications.rb, line 103
    def matches_all others
      grouping_all :matches, others
    end

matches_any(others) click to toggle source

    # File lib/arel/predications.rb, line 99
    def matches_any others
      grouping_any :matches, others
    end

not_eq(other) click to toggle source

    # File lib/arel/predications.rb, line 3
    def not_eq other
      Nodes::NotEqual.new self, other
    end

not_eq_all(others) click to toggle source

    # File lib/arel/predications.rb, line 11
    def not_eq_all others
      grouping_all :not_eq, others
    end

not_eq_any(others) click to toggle source

    # File lib/arel/predications.rb, line 7
    def not_eq_any others
      grouping_any :not_eq, others
    end

not_in(other) click to toggle source

    # File lib/arel/predications.rb, line 60
    def not_in other
      case other
      when Arel::SelectManager
        Arel::Nodes::NotIn.new(self, other.ast)
      when Range
        if other.begin == -Float::INFINITY && other.end == Float::INFINITY
          Nodes::In.new self, []
        elsif other.end == Float::INFINITY
          Nodes::LessThan.new(self, other.begin)
        elsif other.begin == -Float::INFINITY && other.exclude_end?
          Nodes::GreaterThanOrEqual.new(self, other.end)
        elsif other.begin == -Float::INFINITY
          Nodes::GreaterThan.new(self, other.end)
        elsif other.exclude_end?
          left  = Nodes::LessThan.new(self, other.begin)
          right = Nodes::GreaterThanOrEqual.new(self, other.end)
          Nodes::Or.new left, right
        else
          left  = Nodes::LessThan.new(self, other.begin)
          right = Nodes::GreaterThan.new(self, other.end)
          Nodes::Or.new left, right
        end
      else
        Nodes::NotIn.new self, other
      end
    end

not_in_all(others) click to toggle source

    # File lib/arel/predications.rb, line 91
    def not_in_all others
      grouping_all :not_in, others
    end

not_in_any(others) click to toggle source

    # File lib/arel/predications.rb, line 87
    def not_in_any others
      grouping_any :not_in, others
    end

### Private Instance Methods

grouping_all(method_id, others) click to toggle source

    # File lib/arel/predications.rb, line 176
    def grouping_all method_id, others
      Nodes::Grouping.new Nodes::And.new(others.map {|expr| send(method_id, expr)})
    end

grouping_any(method_id, others) click to toggle source

    # File lib/arel/predications.rb, line 169
    def grouping_any method_id, others
      nodes = others.map {|expr| send(method_id, expr)}
      Nodes::Grouping.new nodes.inject { |memo,node|
        Nodes::Or.new(memo, node)
      }
    end