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