Sha256: 0d4747eb777e756b97d0c50229f60b58013d344791bb92f195d5186aeefae3a5
Contents?: true
Size: 1.64 KB
Versions: 1
Compression:
Stored size: 1.64 KB
Contents
module Mongoid module Archivable # 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 class ProcessLocalizedFields < Struct.new(:cls, :attrs) def self.call(*args) new(*args).call end def initialize(cls, attrs = {}) super(cls, attrs) end 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 = att.fetch('_type', relation.class_name).constantize ProcessLocalizedFields.call(relation_class, att) end # convert embeds_one elsif att = attrs[relation_name] relation_class = att.fetch('_type', relation.class_name).constantize attrs[relation_name] = ProcessLocalizedFields.call(relation_class, att) end end attrs end private def localized_fields cls.fields.values.select(&:localized?) end def localized_field_names localized_fields.map(&:name) end 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 def embedded_relations cls.relations.values.select(&:embedded?) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mongoid-archivable-1.7.0 | lib/mongoid/archivable/process_localized_fields.rb |