From feef4211f7ebe3dd81552b865919948da74332fd Mon Sep 17 00:00:00 2001 From: Thorsten Eckel Date: Wed, 19 Apr 2017 14:37:11 +0200 Subject: [PATCH] Added methods to queue registered import backends as import jobs and start them easily via the scheduler. --- app/models/import_job.rb | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/app/models/import_job.rb b/app/models/import_job.rb index 75f58ed16..96edc56cc 100644 --- a/app/models/import_job.rb +++ b/app/models/import_job.rb @@ -59,6 +59,17 @@ class ImportJob < ApplicationModel end end + # Queues and starts all import backends as import jobs. + # + # @example + # ImportJob.start_registered + # + # return [nil] + def self.start_registered + queue_registered + start + end + # Starts all import jobs that have not started yet and are no dry runs. # # @example @@ -68,4 +79,44 @@ class ImportJob < ApplicationModel def self.start where(started_at: nil, dry_run: false).each(&:start) end + + # Queues all configured import backends from Setting 'import_backends' as import jobs + # that are not yet queued. + # + # @example + # ImportJob.queue_registered + # + # return [nil] + def self.queue_registered + import_backends = Setting.get('import_backends') + return if import_backends.blank? + + import_backends.each do |backend| + + if !backend_valid?(backend) + Rails.logger.error "Invalid import backend '#{backend}'" + next + end + + # skip if no entry exists + # skip if a not finished entry exists + next if ImportJob.exists?(name: backend, finished_at: nil) + + ImportJob.create(name: backend) + end + end + + # Checks if the given import backend is valid. + # + # @example + # ImportJob.backend_valid?('Import::Ldap') + # # => true + # + # return [Boolean] + def self.backend_valid?(backend) + backend.constantize + true + rescue NameError + false + end end