internetee/registry

View on GitHub
lib/tasks/contacts/archive.rake

Summary

Maintainability
Test Coverage
namespace :contacts do
  desc 'Archives inactive contacts'

  task :archive, %i[track_id initial_run] => [:environment] do |_t, args|
    unlinked_contacts = contacts_start_point(args[:track_id])
    initial_run = args[:initial_run] == true || args[:initial_run] == 'true'
    counter = 0
    log("Found #{unlinked_contacts.count} unlinked contacts. Starting to archive.")

    unlinked_contacts.each do |contact|
      next unless contact.archivable?

      log("Archiving contact: id(#{contact.id}), code(#{contact.code})")
      contact.archive(verified: true, notify: !initial_run, extra_log: initial_run)
      counter += 1
    end

    log("Archived total: #{counter}")
  end

  def contacts_start_point(track_id = nil)
    puts "Starting to find archivable contacts WHERE CONTACT_ID > #{track_id}" if track_id
    return Contact.unlinked unless track_id

    Contact.unlinked.where("id > #{track_id}")
  end

  def log(msg)
    @log ||= Logger.new($stdout)
    @log.info(msg)
  end
end