diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/stif/reflex_synchronization.rb | 69 | ||||
| -rw-r--r-- | lib/tasks/reflex.rake | 8 |
2 files changed, 77 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 diff --git a/lib/tasks/reflex.rake b/lib/tasks/reflex.rake new file mode 100644 index 000000000..4ac557aa6 --- /dev/null +++ b/lib/tasks/reflex.rake @@ -0,0 +1,8 @@ +namespace :reflex do + desc "Sync data from Reflex api" + task sync: :environment do + start = Time.now + Stif::ReflexSynchronization.synchronize_stop_area + Rails.logger.debug "Reflex-api sync done in #{Time.now - start} seconds !" + end +end |
