From 9104d63f9917df5a363e073f62402a91a16ccf40 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Mon, 20 Nov 2006 12:02:04 +0000 Subject: [PATCH] Quote ActiveSupport::Multibyte::Chars. Closes #6653. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5597 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ .../connection_adapters/abstract/quoting.rb | 3 ++- activerecord/test/base_test.rb | 12 ++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 376581db2e..6199895939 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Quote ActiveSupport::Multibyte::Chars. #6653 [Julian Tarkhanov] + * Simplify query_attribute by typecasting the attribute value and checking whether it's nil, false, zero or blank. #6659 [Jonathan Viney] * validates_numericality_of uses \A \Z to ensure the entire string matches rather than ^ $ which may match one valid line of a multiline string. #5716 [Andreas Schwarz] diff --git a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb index 94d1d9c43f..0f2008deb5 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb @@ -8,7 +8,8 @@ def quote(value, column = nil) return value.quoted_id if value.respond_to?(:quoted_id) case value - when String + when String, ActiveSupport::Multibyte::Chars + value = value.to_s if column && column.type == :binary && column.class.respond_to?(:string_to_binary) "'#{quote_string(column.class.string_to_binary(value))}'" # ' (for ruby-mode) elsif column && [:integer, :float].include?(column.type) diff --git a/activerecord/test/base_test.rb b/activerecord/test/base_test.rb index bb057e75f8..8cd17d7034 100755 --- a/activerecord/test/base_test.rb +++ b/activerecord/test/base_test.rb @@ -1102,6 +1102,18 @@ def test_quote assert_equal author_name, Topic.find(topic.id).author_name end + def test_quote_chars + str = 'The Narrator' + topic = Topic.create(:author_name => str) + assert_equal str, topic.author_name + + assert_kind_of ActiveSupport::Multibyte::Chars, str.chars + topic = Topic.find_by_author_name(str.chars) + + assert_kind_of Topic, topic + assert_equal str, topic.author_name, "The right topic should have been found by name even with name passed as Chars" + end + def test_class_level_destroy should_be_destroyed_reply = Reply.create("title" => "hello", "content" => "world") Topic.find(1).replies << should_be_destroyed_reply -- GitLab