aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model/type/immutable_string.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activemodel/lib/active_model/type/immutable_string.rb')
-rw-r--r--activemodel/lib/active_model/type/immutable_string.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/activemodel/lib/active_model/type/immutable_string.rb b/activemodel/lib/active_model/type/immutable_string.rb
new file mode 100644
index 0000000000..20b8ca0cc4
--- /dev/null
+++ b/activemodel/lib/active_model/type/immutable_string.rb
@@ -0,0 +1,29 @@
+module ActiveModel
+ module Type
+ class ImmutableString < Value # :nodoc:
+ def type
+ :string
+ end
+
+ def serialize(value)
+ case value
+ when ::Numeric, ActiveSupport::Duration then value.to_s
+ when true then "t"
+ when false then "f"
+ else super
+ end
+ end
+
+ private
+
+ def cast_value(value)
+ result = case value
+ when true then "t"
+ when false then "f"
+ else value.to_s
+ end
+ result.freeze
+ end
+ end
+ end
+end