Class: FMCache::Decoder::ValueDecoder::Data

Inherits:
Object
  • Object
show all
Defined in:
lib/fmcache/decoder/value_decoder/data.rb

Instance Method Summary collapse

Constructor Details

#initialize(field_mask:) ⇒ Data

Returns a new instance of Data.



5
6
7
8
9
10
11
12
13
# 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

Instance Method Details

#idObject



40
41
42
43
# 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_idObject



45
46
47
48
# 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:) ⇒ Object



15
16
17
18
19
20
# 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:) ⇒ Object



29
30
31
32
33
34
# 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:) ⇒ Object



22
23
24
25
26
27
# 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_hObject



50
51
52
53
54
55
56
57
58
59
60
61
62
# 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|
    r[name] = data.to_h
  end
  @has_manies.each do |name, data_list|
    r[name] = data_list.map(&:to_h)
  end
  r
end

#valid?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/fmcache/decoder/value_decoder/data.rb', line 36

def valid?
  @attr_names == Set.new(@attrs.keys)
end