Module: BBLib::Serializer

Defined in:
lib/bblib/core/mixins/serializer.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



6
7
8
# File 'lib/bblib/core/mixins/serializer.rb', line 6

def self.included(base)
  base.extend ClassMethods
end

Instance Method Details

#serialize(ignore_defaults = false) ⇒ Object



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