mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
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)
This commit is contained in:
parent
32e5f9049c
commit
b19150448b
3 changed files with 30 additions and 2 deletions
|
@ -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*
|
||||
|
|
|
@ -37,7 +37,7 @@ module Arel # :nodoc: all
|
|||
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?
|
||||
|
@ -85,7 +85,7 @@ Passing a range to `#in` is deprecated. Call `#between`, instead.
|
|||
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?
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue