Class: FormObj::ModelMapper::Array
Instance Method Summary
collapse
Methods inherited from Form::Array
#mark_as_persisted, #mark_for_destruction, #persisted?
#build, #create, #to_hash, #update_attributes
Constructor Details
#initialize(item_class, model_attribute, *args) ⇒ Array
Returns a new instance of Array.
4
5
6
7
|
# File 'lib/form_obj/model_mapper/array.rb', line 4
def initialize(item_class, model_attribute, *args)
@model_attribute = model_attribute
super(item_class, *args)
end
|
Instance Method Details
#delete_models(model_array, ids_to_delete) ⇒ Object
48
49
50
51
52
53
54
|
# File 'lib/form_obj/model_mapper/array.rb', line 48
def delete_models(model_array, ids_to_delete)
if model_array.respond_to?(:destroy_all)
model_array.destroy_all(model_primary_key.name => ids_to_delete)
else
model_array.delete_if { |m| ids_to_delete.include?(model_primary_key.read_from_model(m)) }
end
end
|
#find_model(model_array, id) ⇒ Object
40
41
42
43
44
45
46
|
# File 'lib/form_obj/model_mapper/array.rb', line 40
def find_model(model_array, id)
if model_array.respond_to?("find_by_#{model_primary_key.name}")
model_array.send("find_by_#{model_primary_key.name}", id)
else
model_array.find { |m| model_primary_key.read_from_model(m) == id }
end
end
|
#load_from_models(models, *args) ⇒ Object
9
10
11
12
13
14
15
|
# File 'lib/form_obj/model_mapper/array.rb', line 9
def load_from_models(models, *args)
clear
iterate_through_models_to_load_them(models[:default] || [], *args) do |model|
build.load_from_models(models.merge(default: model), *args)
end
self
end
|
#model_primary_key ⇒ Object
56
57
58
|
# File 'lib/form_obj/model_mapper/array.rb', line 56
def model_primary_key
self.item_class.model_primary_key
end
|
#sync_to_models(models) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/form_obj/model_mapper/array.rb', line 17
def sync_to_models(models)
model_array = models[:default]
ids_exists = []
items_to_add = []
self.each do |item|
if model = find_model(model_array, id = item.primary_key)
item.sync_to_models(models.merge(default: model))
ids_exists << id
else
items_to_add << item
end
end
ids_to_remove = model_array.map { |m| model_primary_key.read_from_model(m) } - ids_exists
delete_models(model_array, ids_to_remove)
items_to_add.each do |item|
model_array << model = model_attribute.create_model
item.sync_to_models(models.merge(default: model))
end
end
|
#to_models_hash(models) ⇒ Object
60
61
62
63
|
# File 'lib/form_obj/model_mapper/array.rb', line 60
def to_models_hash(models)
self.each { |item| models[:default] << item.to_models_hash(models.merge(default: {}))[:default] }
models
end
|