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)