Method: Spider::Model::Versioned#populate_version_object

Defined in:
lib/spiderfw/model/mixins/versioned.rb

#populate_version_object(vobj) ⇒ Object



461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
# File 'lib/spiderfw/model/mixins/versioned.rb', line 461

def populate_version_object(vobj)
    mod = self.class
    vmod = mod.version_model
    version_contents = self.class.version_contents
    
    self.class.elements_array.each do |el|
        v_el = vmod.elements[el.name]
        next unless v_el
        next if el.model? && el.type.attributes[:version_model]
        next if el.integrated? && !(el.integrated_from.embedded? && vmod.storage.supports?(:embedding))
        is_embedded = el.attributes[:embedded] && vmod.storage.supports?(:embedding)
        next if el.multiple? && el.model.respond_to?(:version_element) && !is_embedded
        is_version_content = version_contents.include?(el)
        #debugger if el.name == :news_list
        el_val = self.get(el)
        if self.respond_to?(:prepare_version_object)
            el_val = self.prepare_version_object(el.name, el_val) 
        end
        #next unless mod.mapper.have_references?(el)
        if el_val && el.multiple?
            if !(v_el.model < Spider::Model::VersionModel)
                el_val.each do |v|
                    vobj.get(el.name) << v
                end
            elsif is_embedded && el.junction?
                el_val = instance_variable_get("@#{el.name}_junction") if !el.attributes[:keep_junction]
                el_val.each do |v|
                    jv = v_el.model.new
                    jv_sha1 = v.version_sha1
                    v.populate_version_object(jv)
                    jv.v_sha1 = jv_sha1
                    vobj.get(el.name) << jv
                end
            end
        elsif el.model? && el_val && v_el.type < Spider::Model::VersionModel # && is_version_content 
            
            vobj.set(el.name, el_val.get(el.type.version_element))
                    # if self.class.attributes[:sub_model] && self.class.attributes[:sub_model].respond_to?(:prepare_junction_version_object)
                    #     prep_val = self.class.attributes[:sub_model].prepare_junction_version_object(self.class.attributes[:sub_model_element], el_val)
                    #     prep_val.save_version
                    # end
        else
            vobj.set(el.name, el_val)
        end
    end
end