From eac4658bb2b4f27ab0219b4986b711801583c39f Mon Sep 17 00:00:00 2001 From: Sean Griffin Date: Fri, 26 Dec 2014 15:52:20 -0700 Subject: Eagerly cast range values in the predicate builder A custom object is required for this, as you cannot build a range object out of `Arel::Nodes::Quoted` objects. Depends on the changes introduced in https://github.com/rails/arel/commit/cf03bd45e39def057a2f63e42a3391b7d750dece /cc @mrgilman --- .../relation/predicate_builder/range_handler.rb | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'activerecord/lib/active_record/relation/predicate_builder') 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 47dc46bb4b..a6638738fa 100644 --- a/activerecord/lib/active_record/relation/predicate_builder/range_handler.rb +++ b/activerecord/lib/active_record/relation/predicate_builder/range_handler.rb @@ -1,9 +1,33 @@ module ActiveRecord class PredicateBuilder class RangeHandler # :nodoc: + def initialize(predicate_builder) + @predicate_builder = predicate_builder + end + def call(attribute, value) + value = QuotedRange.new( + predicate_builder.type_cast_for_database(attribute.name, value.begin), + predicate_builder.type_cast_for_database(attribute.name, value.end), + value.exclude_end?, + ) attribute.between(value) end + + protected + + attr_reader :predicate_builder + end + + class QuotedRange # :nodoc: + attr_reader :begin, :end, :exclude_end + alias_method :exclude_end?, :exclude_end + + def initialize(begin_val, end_val, exclude) + @begin = begin_val + @end = end_val + @exclude_end = exclude + end end end end -- cgit v1.2.3