class FMCache::Encoder

Public Class Methods

new(id_key_gen) click to toggle source

@param [FMCache::IdKeyGen]

# File lib/fmcache/encoder.rb, line 6
def initialize(id_key_gen)
  @id_key_gen = id_key_gen
end

Public Instance Methods

encode(values, field_mask) click to toggle source

@param [<Hash>] values @param [FieldMaskParser::Node] field_mask @return [{ String => { String => <Hash> } }]

# File lib/fmcache/encoder.rb, line 13
def encode(values, field_mask)
  fields = Helper.to_fields(field_mask)

  r = {}
  values.each do |value|
    # NOTE: `[]` is the default value of each field.
    h = fields.map { |f| [f, []] }.to_h

    h.merge! encode_one(value, field_mask)

    id = value.fetch(:id)
    r[@id_key_gen.to_key(id)] = h
  end
  r
end
encode_one(value, field_mask) click to toggle source

@param [Hash] value @param [FieldMaskParser::Node] field_mask @return [{ String => <Hash> }]

# File lib/fmcache/encoder.rb, line 32
def encode_one(value, field_mask)
  itemizer = Itemizer.new(value, field_mask)
  itemizer.run!
  itemizer.items
end