From 3a1f6fe7b4a70bf0698b0684dd48ac712c6883b6 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Sat, 2 Jul 2016 10:14:53 +0900 Subject: Extract `PredicateBuilder::CaseSensitiveHandler` Currently uniqueness validator is coupled with building Arel ASTs. This commit extracts `PredicateBuilder::CaseSensitiveHandler` for decouple the building Arel ASTs. --- .../predicate_builder/case_sensitive_handler.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 activerecord/lib/active_record/relation/predicate_builder/case_sensitive_handler.rb (limited to 'activerecord/lib/active_record/relation/predicate_builder') diff --git a/activerecord/lib/active_record/relation/predicate_builder/case_sensitive_handler.rb b/activerecord/lib/active_record/relation/predicate_builder/case_sensitive_handler.rb new file mode 100644 index 0000000000..acf0bbd829 --- /dev/null +++ b/activerecord/lib/active_record/relation/predicate_builder/case_sensitive_handler.rb @@ -0,0 +1,21 @@ +module ActiveRecord + class PredicateBuilder + class CaseSensitiveHandler # :nodoc: + def call(attribute, value) + value.call(attribute) + end + + class Value < Struct.new(:value, :table, :case_sensitive?) # :nodoc: + def call(attribute) + klass = table.send(:klass) + column = klass.column_for_attribute(attribute.name) + if case_sensitive? + klass.connection.case_sensitive_comparison(attribute, column, value) + else + klass.connection.case_insensitive_comparison(attribute, column, value) + end + end + end + end + end +end -- cgit v1.2.3