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