Extract duplicated serialize methods into helpers

Since `serialize` is passed user input args (from `where`, schema
default, etc), a helper should provide `serialize` if the helper also
provide `cast`.

Related #32624, 34cc301, a741208.
This commit is contained in:
Ryuta Kamizono 2019-02-17 21:00:39 +09:00
parent 9379d553d8
commit 1dfd01475d
9 changed files with 17 additions and 21 deletions

@ -10,10 +10,6 @@ def type
:date
end
def serialize(value)
cast(value)
end
def type_cast_for_schema(value)
value.to_s(:db).inspect
end

@ -13,10 +13,6 @@ def type
:datetime
end
def serialize(value)
super(cast(value))
end
private
def cast_value(value)

@ -12,10 +12,6 @@ def type
:decimal
end
def serialize(value)
cast(value)
end
def type_cast_for_schema(value)
value.to_s.inspect
end

@ -18,8 +18,6 @@ def type_cast_for_schema(value)
end
end
alias serialize cast
private
def cast_value(value)

@ -5,6 +5,10 @@ module Type
module Helpers # :nodoc: all
class AcceptsMultiparameterTime < Module
def initialize(defaults: {})
define_method(:serialize) do |value|
super(cast(value))
end
define_method(:cast) do |value|
if value.is_a?(Hash)
value_from_multiparameter_assignment(value)

@ -4,6 +4,10 @@ module ActiveModel
module Type
module Helpers # :nodoc: all
module Numeric
def serialize(value)
cast(value)
end
def cast(value)
value = \
case value

@ -24,7 +24,7 @@ def deserialize(value)
end
def serialize(value)
result = cast(value)
result = super
if result
ensure_in_range(result)
end
@ -35,12 +35,7 @@ def serialize(value)
attr_reader :range
def cast_value(value)
case value
when true then 1
when false then 0
else
value.to_i rescue nil
end
value.to_i rescue nil
end
def ensure_in_range(value)

@ -13,6 +13,10 @@ def type
:time
end
def serialize(value)
super || value
end
def user_input_in_time_zone(value)
return unless value.present?

@ -685,6 +685,9 @@ def test_attributes_on_dummy_time
topic = Topic.find(1)
topic.attributes = attributes
assert_equal Time.local(2000, 1, 1, 5, 42, 0), topic.bonus_time
topic.save!
assert_equal topic, Topic.find_by(attributes)
end
end