aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stif/reflex_synchronization.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/stif/reflex_synchronization.rb')
-rw-r--r--lib/stif/reflex_synchronization.rb69
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/stif/reflex_synchronization.rb b/lib/stif/reflex_synchronization.rb
new file mode 100644
index 000000000..ce663396b
--- /dev/null
+++ b/lib/stif/reflex_synchronization.rb
@@ -0,0 +1,69 @@
+module Stif
+ module ReflexSynchronization
+ class << self
+ def defaut_referential
+ StopAreaReferential.find_by(name: "Reflex")
+ end
+
+ # Todo remove dummy objectid
+ def find_by_object_id objectid
+ Chouette::StopArea.find_by(objectid: "dummy:StopArea:#{objectid.tr(':', '')}")
+ end
+
+ def synchronize_stop_area
+ client = Reflex::API.new
+ ['getOR', 'getOP'].each do |method|
+ results = client.process method
+ results = results[:Quay].merge(results[:StopPlace])
+
+ processed = []
+ results.each do |id, entry|
+ Rails.logger.debug "Reflex - Processing - #{entry.id}"
+ processed << self.create_or_update_stop_area(entry)
+ end
+ processed.each do |entry|
+ Rails.logger.debug "Reflex - Set parent for - #{entry.id}"
+ self.set_parent entry
+ end
+ end
+ end
+
+ def set_parent entry
+ return false unless entry.try(:parent_site_ref) || entry.try(:quays)
+ stop = self.find_by_object_id entry.id
+
+ if entry.try(:parent_site_ref)
+ stop.parent = self.find_by_object_id entry.parent_site_ref
+ stop.save! if stop.changed
+ end
+
+ if entry.try(:quays)
+ entry.quays.each do |quay|
+ children = self.find_by_object_id(quay[:ref])
+ next unless children
+ children.parent = stop
+ children.save! if children.changed?
+ end
+ end
+ end
+
+ def create_or_update_stop_area entry
+ stop = Chouette::StopArea.find_or_create_by(objectid: "dummy:StopArea:#{entry.id.tr(':', '')}")
+ stop.stop_area_referential = self.defaut_referential
+
+ stop.name = entry.name
+ stop.creation_time = entry.created
+ stop.area_type = entry.area_type
+ # stop.object_version = entry.version
+ stop.zip_code = entry.postal_code
+ stop.city_name = entry.city
+
+ if stop.changed?
+ Rails.logger.debug "Reflex - Updating - #{entry.id}"
+ stop.save!
+ stop
+ end
+ end
+ end
+ end
+end