aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/predicate_builder
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2014-12-26 15:33:57 -0700
committerSean Griffin <sean@thoughtbot.com>2014-12-26 15:33:57 -0700
commit3179b4a868c370bf879c15c53b78f25fadec9b41 (patch)
tree5f8fa85b609f182cfbb9c2d4985c93a981208c2a /activerecord/lib/active_record/relation/predicate_builder
parenta60770d3bf3a8aeac16c110f3a7d05a6d52a86d6 (diff)
downloadrails-3179b4a868c370bf879c15c53b78f25fadec9b41.tar.gz
rails-3179b4a868c370bf879c15c53b78f25fadec9b41.tar.bz2
rails-3179b4a868c370bf879c15c53b78f25fadec9b41.zip
Perform casting of single values within the predicate builder
As part of the larger refactoring to remove type casting from Arel, we need to do the casting of values eagerly. The predicate builder is the closest place that knows about the Active Record class, and can therefore have the type information. /cc @mrgilman [Sean Griffin & Melanie Gilman]
Diffstat (limited to 'activerecord/lib/active_record/relation/predicate_builder')
-rw-r--r--activerecord/lib/active_record/relation/predicate_builder/base_handler.rb10
-rw-r--r--activerecord/lib/active_record/relation/predicate_builder/basic_object_handler.rb9
-rw-r--r--activerecord/lib/active_record/relation/predicate_builder/class_handler.rb10
3 files changed, 27 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation/predicate_builder/base_handler.rb b/activerecord/lib/active_record/relation/predicate_builder/base_handler.rb
index d50ea519f9..6fa5b16f73 100644
--- a/activerecord/lib/active_record/relation/predicate_builder/base_handler.rb
+++ b/activerecord/lib/active_record/relation/predicate_builder/base_handler.rb
@@ -1,9 +1,17 @@
module ActiveRecord
class PredicateBuilder
class BaseHandler # :nodoc:
+ def initialize(predicate_builder)
+ @predicate_builder = predicate_builder
+ end
+
def call(attribute, value)
- attribute.eq(value.id)
+ predicate_builder.build(attribute, value.id)
end
+
+ protected
+
+ attr_reader :predicate_builder
end
end
end
diff --git a/activerecord/lib/active_record/relation/predicate_builder/basic_object_handler.rb b/activerecord/lib/active_record/relation/predicate_builder/basic_object_handler.rb
index 79cde00303..57a8b63001 100644
--- a/activerecord/lib/active_record/relation/predicate_builder/basic_object_handler.rb
+++ b/activerecord/lib/active_record/relation/predicate_builder/basic_object_handler.rb
@@ -1,9 +1,18 @@
module ActiveRecord
class PredicateBuilder
class BasicObjectHandler # :nodoc:
+ def initialize(predicate_builder)
+ @predicate_builder = predicate_builder
+ end
+
def call(attribute, value)
+ value = predicate_builder.type_cast_for_database(attribute.name, value)
attribute.eq(value)
end
+
+ protected
+
+ attr_reader :predicate_builder
end
end
end
diff --git a/activerecord/lib/active_record/relation/predicate_builder/class_handler.rb b/activerecord/lib/active_record/relation/predicate_builder/class_handler.rb
index 3fe1642ed0..ed313fc9d4 100644
--- a/activerecord/lib/active_record/relation/predicate_builder/class_handler.rb
+++ b/activerecord/lib/active_record/relation/predicate_builder/class_handler.rb
@@ -1,11 +1,19 @@
module ActiveRecord
class PredicateBuilder
class ClassHandler # :nodoc:
+ def initialize(predicate_builder)
+ @predicate_builder = predicate_builder
+ end
+
def call(attribute, value)
print_deprecation_warning
- attribute.eq(value.name)
+ predicate_builder.build(attribute, value.name)
end
+ protected
+
+ attr_reader :predicate_builder
+
private
def print_deprecation_warning