aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/predicate_builder
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2019-01-03 09:46:42 +0900
committerRyuta Kamizono <kamipo@gmail.com>2019-01-08 16:45:17 +0900
commit7f856c3c8db71e2600d6a84bbc6510eb4ddd0418 (patch)
tree0a88d5d29152838ecc9495e784f5b6e68aa2b725 /activerecord/lib/active_record/relation/predicate_builder
parenta75dea08225285eec5fc199684cd1a51853d2845 (diff)
downloadrails-7f856c3c8db71e2600d6a84bbc6510eb4ddd0418.tar.gz
rails-7f856c3c8db71e2600d6a84bbc6510eb4ddd0418.tar.bz2
rails-7f856c3c8db71e2600d6a84bbc6510eb4ddd0418.zip
Consolidate the duplicated code that building range predicate
This slightly change the code in the Arel to allow +/-INFINITY as open ended since the Active Record expects that behavior. See 5ecbeda.
Diffstat (limited to 'activerecord/lib/active_record/relation/predicate_builder')
-rw-r--r--activerecord/lib/active_record/relation/predicate_builder/range_handler.rb23
1 files changed, 2 insertions, 21 deletions
diff --git a/activerecord/lib/active_record/relation/predicate_builder/range_handler.rb b/activerecord/lib/active_record/relation/predicate_builder/range_handler.rb
index 44bb2c7ab6..2ea27c8490 100644
--- a/activerecord/lib/active_record/relation/predicate_builder/range_handler.rb
+++ b/activerecord/lib/active_record/relation/predicate_builder/range_handler.rb
@@ -3,11 +3,7 @@
module ActiveRecord
class PredicateBuilder
class RangeHandler # :nodoc:
- class RangeWithBinds < Struct.new(:begin, :end)
- def exclude_end?
- false
- end
- end
+ RangeWithBinds = Struct.new(:begin, :end, :exclude_end?)
def initialize(predicate_builder)
@predicate_builder = predicate_builder
@@ -16,22 +12,7 @@ module ActiveRecord
def call(attribute, value)
begin_bind = predicate_builder.build_bind_attribute(attribute.name, value.begin)
end_bind = predicate_builder.build_bind_attribute(attribute.name, value.end)
-
- if begin_bind.value.infinity?
- if end_bind.value.infinity?
- attribute.not_in([])
- elsif value.exclude_end?
- attribute.lt(end_bind)
- else
- attribute.lteq(end_bind)
- end
- elsif end_bind.value.infinity?
- attribute.gteq(begin_bind)
- elsif value.exclude_end?
- attribute.gteq(begin_bind).and(attribute.lt(end_bind))
- else
- attribute.between(RangeWithBinds.new(begin_bind, end_bind))
- end
+ attribute.between(RangeWithBinds.new(begin_bind, end_bind, value.exclude_end?))
end
private