class Mongoid::Archivable::ProcessLocalizedFields

loops through all fields on document, as well as on its embedded relations and makes sure all attributes that belong to localized fields are assigned via their *_translations writer

Public Class Methods

call(*args) click to toggle source
# File lib/mongoid/archivable/process_localized_fields.rb, line 7
def self.call(*args)
  new(*args).call
end
new(cls, attrs = {}) click to toggle source
Calls superclass method
# File lib/mongoid/archivable/process_localized_fields.rb, line 11
def initialize(cls, attrs = {})
  super(cls, attrs)
end

Public Instance Methods

call() click to toggle source
# File lib/mongoid/archivable/process_localized_fields.rb, line 15
def call
  attrs = convert_fields

  embedded_relations.each do |relation|
    relation_name = relation.name.to_s

    # convert embeds_many
    if attrs[relation_name].is_a?(Array)
      attrs[relation_name] = attrs[relation_name].map do |att|
        relation_class = Hash[att].fetch('_type', relation.class_name).constantize
        ProcessLocalizedFields.call(relation_class, Hash[att])
      end
    # convert embeds_one
    elsif att = attrs[relation_name]
      relation_class = Hash[att].fetch('_type', relation.class_name).constantize
      attrs[relation_name] = ProcessLocalizedFields.call(relation_class, Hash[att])
    end
  end

  attrs
end

Private Instance Methods

convert_fields() click to toggle source
# File lib/mongoid/archivable/process_localized_fields.rb, line 47
def convert_fields
  attrs.map do |name, value|
    if localized_field_names.include?(name.to_s)
      name = "#{name}_translations"
    end
    [name, value]
  end.to_h
end
embedded_relations() click to toggle source
# File lib/mongoid/archivable/process_localized_fields.rb, line 56
def embedded_relations
  cls.relations.values.select(&:embedded?)
end
localized_field_names() click to toggle source
# File lib/mongoid/archivable/process_localized_fields.rb, line 43
def localized_field_names
  localized_fields.map(&:name)
end
localized_fields() click to toggle source
# File lib/mongoid/archivable/process_localized_fields.rb, line 39
def localized_fields
  cls.fields.values.select(&:localized?)
end