40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/alchemy/upgrader/tasks/ingredients_migrator.rb', line 40
def self.call(element)
Alchemy::Element.transaction do
element.definition[:ingredients].each do |ingredient_definition|
ingredient = element.ingredients.build(
role: ingredient_definition[:role],
type: Alchemy::Ingredient.normalize_type(ingredient_definition[:type]),
)
content = element.content_by_name(ingredient_definition[:role])
if content
essence = content.essence
if essence
belongs_to_associations = essence.class.reflect_on_all_associations(:belongs_to)
if belongs_to_associations.any?
ingredient.related_object = essence.public_send(belongs_to_associations.first.name)
else
ingredient.value = content.ingredient
end
data = ingredient.class.stored_attributes.fetch(:data, []).each_with_object({}) do |attr, d|
d[attr] = essence.public_send(attr)
end
ingredient.data = data
end
content.destroy!
end
ingredient.save!
end
end
end
|