Class: FMCache::Decoder::ValueDecoder::Data
- Inherits:
-
Object
- Object
- FMCache::Decoder::ValueDecoder::Data
- Defined in:
- lib/fmcache/decoder/value_decoder/data.rb
Instance Method Summary collapse
- #id ⇒ Object
-
#initialize(field_mask:) ⇒ Data
constructor
A new instance of Data.
- #p_id ⇒ Object
- #push_attr(name:, item:) ⇒ Object
- #push_has_many(name:, data:) ⇒ Object
- #push_has_one(name:, data:) ⇒ Object
- #to_h ⇒ Object
- #valid? ⇒ Boolean
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
#id ⇒ Object
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_id ⇒ Object
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_h ⇒ Object
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
36 37 38 |
# File 'lib/fmcache/decoder/value_decoder/data.rb', line 36 def valid? @attr_names == Set.new(@attrs.keys) end |