# 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