diff options
author | Matthew Draper <matthew@trebex.net> | 2017-04-12 03:14:09 +0930 |
---|---|---|
committer | Matthew Draper <matthew@trebex.net> | 2017-04-12 03:14:09 +0930 |
commit | 8de7df5b22e853f028e5a71b26d45a0ce7a2c0f4 (patch) | |
tree | 817c7966183f31e2e9d004e35489a09a8a5bed91 /activemodel/lib | |
parent | 24ac36be7150f97ac0a61cf7cbe7d212097ef1a6 (diff) | |
download | rails-8de7df5b22e853f028e5a71b26d45a0ce7a2c0f4.tar.gz rails-8de7df5b22e853f028e5a71b26d45a0ce7a2c0f4.tar.bz2 rails-8de7df5b22e853f028e5a71b26d45a0ce7a2c0f4.zip |
Don't freeze input strings
See 34321e4a433bb7eef48fd743286601403f8f7d82 for background on
ImmutableString vs String.
Our String type cannot delegate typecasting to ImmutableString, because
the latter freezes its input: duplicating the value after that gives us
an unfrozen result, but still mutates the originally passed object.
Diffstat (limited to 'activemodel/lib')
-rw-r--r-- | activemodel/lib/active_model/type/string.rb | 7 |
1 files changed, 6 insertions, 1 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 |