Module: Etna::JsonSerializableStruct

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(cls) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/etna/json_serializable_struct.rb', line 3

def self.included(cls)
  cls.instance_eval do
    def self.as_json(v)
      if v.respond_to? :as_json
        return v.as_json
      end

      if v.is_a? Hash
        return v.map { |k, v| [k, as_json(v)] }.to_h
      end

      if v.class.include? Enumerable
        return v.map { |v| as_json(v) }
      end

      v
    end
  end
end

Instance Method Details

#as_json(keep_nils: false) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/etna/json_serializable_struct.rb', line 23

def as_json(keep_nils: false)
  inner_json = members.map do |k|
    v = self.class.as_json(send(k))
    [k, v]
  end.to_h

  return inner_json if keep_nils
  inner_json.delete_if { |k, v| v.nil? }
end

#to_jsonObject



33
34
35
# File 'lib/etna/json_serializable_struct.rb', line 33

def to_json
  as_json.to_json
end