Skip to content

Commit

Permalink
Merge pull request #36696 from inopinatus/support_beginless_ranges
Browse files Browse the repository at this point in the history
Support beginless ranges in hash conditions.
  • Loading branch information
kamipo committed Jul 17, 2019
2 parents 32e5f90 + b191504 commit 2a28b7c
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
4 changes: 4 additions & 0 deletions activerecord/CHANGELOG.md
@@ -1,3 +1,7 @@
* Add support for beginless ranges, introduced in Ruby 2.7.

*Josh Goodall*

* Add database_exists? method to connection adapters to check if a database exists.

*Guilherme Mansur*
Expand Down
4 changes: 2 additions & 2 deletions activerecord/lib/arel/predications.rb
Expand Up @@ -37,7 +37,7 @@ def eq_all(others)
def between(other)
if unboundable?(other.begin) == 1 || unboundable?(other.end) == -1
self.in([])
elsif open_ended?(other.begin)
elsif other.begin.nil? || open_ended?(other.begin)
if other.end.nil? || open_ended?(other.end)
not_in([])
elsif other.exclude_end?
Expand Down Expand Up @@ -85,7 +85,7 @@ def in_all(others)
def not_between(other)
if unboundable?(other.begin) == 1 || unboundable?(other.end) == -1
not_in([])
elsif open_ended?(other.begin)
elsif other.begin.nil? || open_ended?(other.begin)
if other.end.nil? || open_ended?(other.end)
self.in([])
elsif other.exclude_end?
Expand Down
24 changes: 24 additions & 0 deletions activerecord/test/cases/arel/attributes/attribute_test.rb
Expand Up @@ -638,6 +638,18 @@ class AttributeTest < Arel::Spec
)
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
Expand Down Expand Up @@ -839,6 +851,18 @@ class AttributeTest < Arel::Spec
)
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
Expand Down

0 comments on commit 2a28b7c

Please sign in to comment.