Class: Nexo::FolderSyncJob
- Defined in:
- app/jobs/nexo/folder_sync_job.rb
Instance Method Summary collapse
-
#perform(folder) ⇒ Object
TODO!: limit concurrency.
Instance Method Details
#perform(folder) ⇒ Object
TODO!: limit concurrency
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'app/jobs/nexo/folder_sync_job.rb', line 4 def perform(folder) protocol_service = ServiceBuilder.instance.build_protocol_service(folder) if folder.external_identifier.blank? response = protocol_service.insert_calendar(folder) folder.update(external_identifier: response.id) else protocol_service.update_calendar(folder) end policies = PolicyService.instance.policies_for(folder) Nexo.logger.debug { "Found #{policies.length} policies" } # flat_map should be equivalent to: # policies.map(&:synchronizable_queries).flatten(1) queries = policies.flat_map(&:synchronizable_queries) Nexo.logger.debug { "Found #{queries.length} queries" } GoodJob::Bulk.enqueue do queries.each do |query| # TODO: avoid calling more than once per synchronizable query.find_each do |synchronizable| Nexo.logger.debug { "Processing synchronizable: #{synchronizable}" } folder_service.find_element_and_sync(folder, synchronizable) end end end Nexo.logger.debug { "Finished processing queries" } end |