Class: FormObj::Mappable::Array
- Defined in:
- lib/form_obj/mappable/array.rb
Instance Method Summary collapse
- #delete_models(model_array, ids_to_delete) ⇒ Object
- #find_model(model_array, id) ⇒ Object
-
#initialize(item_class, model_attribute:) ⇒ Array
constructor
A new instance of Array.
- #load_from_models(models) ⇒ Object
- #model_primary_key ⇒ Object
- #save_to_models(models) ⇒ Object
- #to_models_hash(models) ⇒ Object
Methods inherited from Array
Constructor Details
#initialize(item_class, model_attribute:) ⇒ Array
Returns a new instance of Array.
4 5 6 7 |
# File 'lib/form_obj/mappable/array.rb', line 4 def initialize(item_class, model_attribute:) @model_attribute = model_attribute super(item_class) end |
Instance Method Details
#delete_models(model_array, ids_to_delete) ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/form_obj/mappable/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/mappable/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) ⇒ Object
9 10 11 12 13 14 15 |
# File 'lib/form_obj/mappable/array.rb', line 9 def load_from_models(models) clear (models[:default] || []).each do |model| create.load_from_models(models.merge(default: model)) end self end |
#model_primary_key ⇒ Object
56 57 58 |
# File 'lib/form_obj/mappable/array.rb', line 56 def model_primary_key self.item_class.model_primary_key end |
#save_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/mappable/array.rb', line 17 def save_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.save_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 # || model_array.create_model item.save_to_models(models.merge(default: model)) end end |
#to_models_hash(models) ⇒ Object
60 61 62 63 |
# File 'lib/form_obj/mappable/array.rb', line 60 def to_models_hash(models) self.each { |item| models[:default] << item.to_models_hash(models.merge(default: {}))[:default] } models end |