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:
parent
9379d553d8
commit
1dfd01475d
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user