diff options
| author | Xinhui | 2016-08-31 11:03:22 +0200 |
|---|---|---|
| committer | Xinhui | 2016-08-31 11:03:22 +0200 |
| commit | d71549685f124fd895b01884f7d236cf09b96e85 (patch) | |
| tree | b1e0ab628872ad133ed594c56f369cf05c15080d /lib/stif/reflex_synchronization.rb | |
| parent | 98debbeaac00dbf1aa2c752521d5878776c540dc (diff) | |
| download | chouette-core-d71549685f124fd895b01884f7d236cf09b96e85.tar.bz2 | |
Wip sync reflex - add gem - task reflex:sync + whenever cfg
Diffstat (limited to 'lib/stif/reflex_synchronization.rb')
| -rw-r--r-- | lib/stif/reflex_synchronization.rb | 69 |
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 |
