From b19150448bcf65362c34b5a741ce162cd2b79216 Mon Sep 17 00:00:00 2001
From: Josh Goodall <inopinatus@inopinatus.org>
Date: Wed, 17 Jul 2019 15:18:54 +1000
Subject: Support beginless ranges in hash conditions.

Ruby 2.7 introduces beginless ranges (..value and ...value) and as with
endless ranges we can turn these into inequalities, enabling expressions
such as

    Order.where(created_at: ..1.year.ago)
    User.where(karma: ...0)
---
 .../test/cases/arel/attributes/attribute_test.rb   | 24 ++++++++++++++++++++++
 1 file changed, 24 insertions(+)

(limited to 'activerecord/test')

diff --git a/activerecord/test/cases/arel/attributes/attribute_test.rb b/activerecord/test/cases/arel/attributes/attribute_test.rb
index c7bd0a053b..7ebb90c6fd 100644
--- a/activerecord/test/cases/arel/attributes/attribute_test.rb
+++ b/activerecord/test/cases/arel/attributes/attribute_test.rb
@@ -638,6 +638,18 @@ module Arel
           )
         end
 
+        if Gem::Version.new("2.7.0") <= Gem::Version.new(RUBY_VERSION)
+          it "can be constructed with a range implicitly starting at Infinity" do
+            attribute = Attribute.new nil, nil
+            node = attribute.between(eval("..0")) # eval for backwards compatibility
+
+            node.must_equal Nodes::LessThanOrEqual.new(
+              attribute,
+              Nodes::Casted.new(0, attribute)
+            )
+          end
+        end
+
         if Gem::Version.new("2.6.0") <= Gem::Version.new(RUBY_VERSION)
           it "can be constructed with a range implicitly ending at Infinity" do
             attribute = Attribute.new nil, nil
@@ -839,6 +851,18 @@ module Arel
           )
         end
 
+        if Gem::Version.new("2.7.0") <= Gem::Version.new(RUBY_VERSION)
+          it "can be constructed with a range implicitly starting at Infinity" do
+            attribute = Attribute.new nil, nil
+            node = attribute.not_between(eval("..0")) # eval for backwards compatibility
+
+            node.must_equal Nodes::GreaterThan.new(
+              attribute,
+              Nodes::Casted.new(0, attribute)
+            )
+          end
+        end
+
         if Gem::Version.new("2.6.0") <= Gem::Version.new(RUBY_VERSION)
           it "can be constructed with a range implicitly ending at Infinity" do
             attribute = Attribute.new nil, nil
-- 
cgit v1.2.3