mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
3579876931
Follow up of 6d63b5e49a
.
40 lines
1 KiB
Ruby
40 lines
1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module ActiveModel
|
|
class AttributeSet
|
|
# Attempts to do more intelligent YAML dumping of an
|
|
# ActiveModel::AttributeSet to reduce the size of the resulting string
|
|
class YAMLEncoder # :nodoc:
|
|
def initialize(default_types)
|
|
@default_types = default_types
|
|
end
|
|
|
|
def encode(attribute_set, coder)
|
|
coder["concise_attributes"] = attribute_set.each_value.map do |attr|
|
|
if attr.type.equal?(default_types[attr.name])
|
|
attr.with_type(nil)
|
|
else
|
|
attr
|
|
end
|
|
end
|
|
end
|
|
|
|
def decode(coder)
|
|
if coder["attributes"]
|
|
coder["attributes"]
|
|
else
|
|
attributes_hash = Hash[coder["concise_attributes"].map do |attr|
|
|
if attr.type.nil?
|
|
attr = attr.with_type(default_types[attr.name])
|
|
end
|
|
[attr.name, attr]
|
|
end]
|
|
AttributeSet.new(attributes_hash)
|
|
end
|
|
end
|
|
|
|
private
|
|
attr_reader :default_types
|
|
end
|
|
end
|
|
end
|