class FMCache::Encoder::Itemizer
Attributes
items[R]
- { String => <Hash> }
Public Class Methods
new(value, field_mask)
click to toggle source
@param [Hash] value @param [FieldMaskParser::Node] field_mask
# File lib/fmcache/encoder/itemizer.rb, line 6 def initialize(value, field_mask) @value = value @field_mask = field_mask @items = {} end
Public Instance Methods
run!()
click to toggle source
# File lib/fmcache/encoder/itemizer.rb, line 15 def run! traverse!(value: @value, field_mask: @field_mask, prefix: [], p_id: nil) end
Private Instance Methods
traverse!(value:, field_mask:, prefix:, p_id:)
click to toggle source
# File lib/fmcache/encoder/itemizer.rb, line 21 def traverse!(value:, field_mask:, prefix:, p_id:) id = value[:id] field_mask.attrs.each do |attr| f = Field.to_s(prefix: prefix, attr: attr) v = value[attr] @items[f] ||= [] @items[f] << { value: v, id: id, p_id: p_id } end field_mask.has_ones.each do |assoc| v = value[assoc.name] if v # NOTE: Proceed only when value exists p = prefix + [assoc.name] traverse!(value: v, field_mask: assoc, prefix: p, p_id: id) end end field_mask.has_manies.each do |assoc| values = value[assoc.name] || [] p = prefix + [assoc.name] values.each do |v| traverse!(value: v, field_mask: assoc, prefix: p, p_id: id) end end end