app/models/apidae/selection.rb in apidae-0.1.0 vs app/models/apidae/selection.rb in apidae-0.1.1

- old
+ new

@@ -7,22 +7,26 @@ def self.import(json_file) selections_json = File.read(json_file) selections_hashes = JSON.parse(selections_json, symbolize_names: true) selections_hashes.each do |selection_data| - existing_sel = Apidae::Selection.find_by_apidae_id(selection_data[:id]) - unless existing_sel - selection = Apidae::Selection.create!( - label: selection_data[:nom], - apidae_id: selection_data[:id] - ) - if selection_data[:objetsTouristiques] - selection_data[:objetsTouristiques].each do |o| - apidae_object = Apidae::Object.find_by_apidae_id(o[:id]) - selection.objects << apidae_object - selection.save! - end - end + apidae_sel = Apidae::Selection.first_or_initialize(apidae_id: selection_data[:id]) + apidae_sel.label = selection_data[:nom] + apidae_sel.save! + + current_objs = apidae_sel.objects.collect {|obj| obj.apidae_id} + imported_objs = selection_data[:objetsTouristiques] || [] + added = imported_objs - current_objs + removed = current_objs - imported_objs + + added.each do |o| + apidae_object = Apidae::Object.find_by_apidae_id(o[:id]) + apidae_sel.objects << apidae_object + end + + removed.each do |o| + apidae_object = Apidae::Object.find_by_apidae_id(o[:id]) + apidae_sel.objects.delete(apidae_object) end end end def agenda(from, to)