class FMCache::Decoder::ValueDecoder::Data
Public Class Methods
new(field_mask:)
click to toggle source
# File lib/fmcache/decoder/value_decoder/data.rb, line 5 def initialize(field_mask:) has_one_names = field_mask.has_ones.map(&:name) has_many_names = field_mask.has_manies.map(&:name) @attr_names = Set.new(field_mask.attrs) @attrs = {} @has_ones = has_one_names.map { |n| [n, nil] }.to_h @has_manies = has_many_names.map { |n| [n, []] }.to_h end
Public Instance Methods
id()
click to toggle source
# File lib/fmcache/decoder/value_decoder/data.rb, line 40 def id raise "internal error!" if @attrs.size == 0 @attrs.values[0].id end
p_id()
click to toggle source
# File lib/fmcache/decoder/value_decoder/data.rb, line 45 def p_id raise "internal error!" if @attrs.size == 0 @attrs.values[0].p_id end
push_attr(name:, item:)
click to toggle source
# File lib/fmcache/decoder/value_decoder/data.rb, line 15 def push_attr(name:, item:) if !@attr_names.include?(name) raise "invalid data" end @attrs[name] = item end
push_has_many(name:, data:)
click to toggle source
# File lib/fmcache/decoder/value_decoder/data.rb, line 29 def push_has_many(name:, data:) if !@has_manies.has_key?(name) raise "inavlid data" end @has_manies[name] << data end
push_has_one(name:, data:)
click to toggle source
# File lib/fmcache/decoder/value_decoder/data.rb, line 22 def push_has_one(name:, data:) if !@has_ones.has_key?(name) raise "invalid data" end @has_ones[name] = data end
to_h()
click to toggle source
# File lib/fmcache/decoder/value_decoder/data.rb, line 50 def to_h r = { id: id } @attrs.each do |name, item| r[name] = item.value end @has_ones.each do |name, data| if data r[name] = data.to_h else r[name] = nil end end @has_manies.each do |name, data_list| r[name] = data_list.map(&:to_h) end r end
valid?()
click to toggle source
# File lib/fmcache/decoder/value_decoder/data.rb, line 36 def valid? @attr_names == Set.new(@attrs.keys) end