47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/bblib/core/mixins/serializer.rb', line 47
def serialize(ignore_defaults = false)
self.class._serialize_fields.map do |name, opts|
next if self.class._dont_serialize_fields.include?(name)
args = [opts[:method]] + (opts.include?(:args) ? [opts[:args]].flatten(1) : [])
value = send(*args)
next if value == self
unless opts[:flat]
if value.is_a?(Hash)
value = value.map { |k, v| [k, v != self && v.respond_to?(:serialize) ? v.serialize(ignore_defaults) : v] }.to_h
elsif value.is_a?(Array)
value = value.map { |v| v != self && v.respond_to?(:serialize) ? v.serialize(ignore_defaults) : v }
elsif value.respond_to?(:serialize)
value = value.serialize(ignore_defaults)
end
end
if !opts[:always] && (ignore_defaults && value == opts[:default] || opts.include?(:ignore) && value == opts[:ignore])
nil
else
[name, value]
end
end.compact.to_h
end
|