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.rb87
1 files changed, 46 insertions, 41 deletions
diff --git a/lib/stif/reflex_synchronization.rb b/lib/stif/reflex_synchronization.rb
index 956f94696..471b226c2 100644
--- a/lib/stif/reflex_synchronization.rb
+++ b/lib/stif/reflex_synchronization.rb
@@ -14,7 +14,6 @@ module Stif
client = Reflex::API.new
processed = []
initial_count = Chouette::StopArea.where(deleted_at: nil).count
- existing_records = Hash[Chouette::StopArea.pluck(:import_xml, :objectid).map{|xml, id| [id, xml]}]
['getOR', 'getOP'].each do |method|
start = Time.now
@@ -25,19 +24,18 @@ module Stif
end
# Create or update stop_area for every quay, stop_place
- stop_areas = results[:Quay].merge(results[:StopPlace])
- start = Time.now
- stop_areas.each do |id, entry|
- processed << entry.id
- next unless need_update_or_create?(existing_records, entry)
+ stop_areas = results[:Quay] | results[:StopPlace]
+
+ start = Time.now
+ stop_areas.each do |entry|
+ processed << entry['id']
self.create_or_update_stop_area entry
end
Rails.logger.info "Reflex:sync - Create or update StopArea done in #{Time.now - start} seconds"
# Walk through every entry and set parent stop_area
start = Time.now
- stop_areas.each do |id, entry|
- next unless need_update_or_create?(existing_records, entry)
+ stop_areas.each do |entry|
self.stop_area_set_parent entry
end
Rails.logger.info "Reflex:sync - StopArea set parent done in #{Time.now - start} seconds"
@@ -48,10 +46,6 @@ module Stif
}
end
- def need_update_or_create? existing_records, entry
- return true unless existing_records.key?(entry.id) && entry.xml == existing_records[entry.id]
- end
-
def set_deleted_stop_area processed
start = Time.now
deleted = Chouette::StopArea.where(deleted_at: nil).pluck(:objectid).uniq - processed
@@ -63,18 +57,18 @@ module Stif
end
def stop_area_set_parent entry
- return false unless entry.try(:parent_site_ref) || entry.try(:quays)
- stop = self.find_by_object_id entry.id
+ return false unless entry['parent'] || entry['quays']
+ stop = self.find_by_object_id entry['id']
return false unless stop
- if entry.try(:parent_site_ref)
- stop.parent = self.find_by_object_id entry.parent_site_ref
+ if entry['parent']
+ stop.parent = self.find_by_object_id entry['parent']
stop.save! if stop.changed
end
- if entry.try(:quays)
- entry.quays.each do |quay|
- children = self.find_by_object_id(quay[:ref])
+ if entry['quays']
+ entry['quays'].each do |id|
+ children = self.find_by_object_id id
next unless children
children.parent = stop
children.save! if children.changed?
@@ -82,39 +76,50 @@ module Stif
end
end
+ def access_point_access_type entry
+ if entry['IsEntry'] == 'true' && entry['IsExit'] == 'true'
+ 'in_out'
+ elsif entry['IsEntry'] == 'true'
+ 'in'
+ elsif entry['IsExit'] == 'true'
+ 'out'
+ end
+ end
+
def create_or_update_access_point entry, stop_area
- access = Chouette::AccessPoint.find_or_create_by(objectid: "dummy:AccessPoint:#{entry.id.tr(':', '')}")
+ access = Chouette::AccessPoint.find_or_create_by(objectid: "dummy:AccessPoint:#{entry['id'].tr(':', '')}")
# Hack, on save object_version will be incremented by 1
- entry.version = entry.version.to_i + 1 if access.persisted?
+ entry['version'] = entry['version'].to_i + 1 if access.persisted?
+ access.access_type = self.access_point_access_type(entry)
access.stop_area = stop_area
{
- :name => :name,
- :access_type => :access_type,
- :object_version => :version,
- :zip_code => :postal_code,
- :city_name => :city,
- :import_xml => :xml
- }.each do |k, v| access[k] = entry.try(v) end
- access.save if access.changed?
+ :name => 'Name',
+ :object_version => 'version',
+ :zip_code => 'PostalRegion',
+ :city_name => 'Town'
+ }.each do |k, v| access[k] = entry[v] end
+ access.save! if access.changed?
end
def create_or_update_stop_area entry
- stop = Chouette::StopArea.find_or_create_by(objectid: entry.id)
+ stop = Chouette::StopArea.find_or_create_by(objectid: entry['id'])
stop.deleted_at = nil
stop.stop_area_referential = self.defaut_referential
{
- :name => :name,
- :creation_time => :created,
- :area_type => :area_type,
- :object_version => :version,
- :zip_code => :postal_code,
- :city_name => :city,
- :import_xml => :xml
- }.each do |k, v| stop[k] = entry.try(v) end
- stop.save! if stop.changed?
+ :name => 'Name',
+ :creation_time => 'created',
+ :area_type => 'type',
+ :object_version => 'version',
+ :zip_code => 'PostalRegion',
+ :city_name => 'Town'
+ }.each do |k, v| stop[k] = entry[v] end
+ if stop.changed?
+ stop.import_xml = entry[:xml]
+ stop.save!
+ end
# Create AccessPoint from StopPlaceEntrance
- if entry.try(:entrances)
- entry.entrances.each do |entrance|
+ if entry[:stop_place_entrances]
+ entry[:stop_place_entrances].each do |entrance|
self.create_or_update_access_point entrance, stop
end
end