aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2017-04-12 07:33:11 +0930
committerGitHub <noreply@github.com>2017-04-12 07:33:11 +0930
commitfff414ede72ee2dcb39a67aefb4ee6e5c2fd1db0 (patch)
treeb89779bd338cd57da9206e43b0b091326809062a
parentacc5a55118515227537d0e7b8b129b303cfaf667 (diff)
parent8de7df5b22e853f028e5a71b26d45a0ce7a2c0f4 (diff)
downloadrails-fff414ede72ee2dcb39a67aefb4ee6e5c2fd1db0.tar.gz
rails-fff414ede72ee2dcb39a67aefb4ee6e5c2fd1db0.tar.bz2
rails-fff414ede72ee2dcb39a67aefb4ee6e5c2fd1db0.zip
Merge pull request #28729 from matthewd/dont-freeze-inputs
Don't freeze input strings
-rw-r--r--activemodel/lib/active_model/type/string.rb7
-rw-r--r--activemodel/test/cases/type/string_test.rb13
2 files changed, 17 insertions, 3 deletions
diff --git a/activemodel/lib/active_model/type/string.rb b/activemodel/lib/active_model/type/string.rb
index c7e0208a5a..850cab962b 100644
--- a/activemodel/lib/active_model/type/string.rb
+++ b/activemodel/lib/active_model/type/string.rb
@@ -12,7 +12,12 @@ module ActiveModel
private
def cast_value(value)
- ::String.new(super)
+ case value
+ when ::String then ::String.new(value)
+ when true then "t".freeze
+ when false then "f".freeze
+ else value.to_s
+ end
end
end
end
diff --git a/activemodel/test/cases/type/string_test.rb b/activemodel/test/cases/type/string_test.rb
index 222083817e..47d412e27e 100644
--- a/activemodel/test/cases/type/string_test.rb
+++ b/activemodel/test/cases/type/string_test.rb
@@ -12,16 +12,25 @@ module ActiveModel
end
test "cast strings are mutable" do
- s = "foo"
type = Type::String.new
+
+ s = "foo"
assert_equal false, type.cast(s).frozen?
+ assert_equal false, s.frozen?
+
+ f = "foo".freeze
+ assert_equal false, type.cast(f).frozen?
+ assert_equal true, f.frozen?
end
test "values are duped coming out" do
- s = "foo"
type = Type::String.new
+
+ s = "foo"
assert_not_same s, type.cast(s)
+ assert_equal s, type.cast(s)
assert_not_same s, type.deserialize(s)
+ assert_equal s, type.deserialize(s)
end
end
end