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)
el_val = self.get(el)
if self.respond_to?(:prepare_version_object)
el_val = self.prepare_version_object(el.name, el_val)
end
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
vobj.set(el.name, el_val.get(el.type.version_element))
else
vobj.set(el.name, el_val)
end
end
end
|