module BBLib::Serializer
Public Class Methods
included(base)
click to toggle source
# File lib/bblib/core/mixins/serializer.rb, line 6 def self.included(base) base.extend ClassMethods end
Public Instance Methods
serialize(ignore_defaults = false)
click to toggle source
# 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