class Longleaf::DeregisterCommand

Command for deregistering files with longleaf

Public Class Methods

new(app_manager) click to toggle source
# File lib/longleaf/commands/deregister_command.rb, line 12
def initialize(app_manager)
  @app_manager = app_manager
end

Public Instance Methods

execute(file_selector:, force: false) click to toggle source

Execute the deregister command on the given parameters @param file_selector [FileSelector] selector for files to deregister @param force [Boolean] force flag @return [Integer] status code

# File lib/longleaf/commands/deregister_command.rb, line 20
def execute(file_selector:, force: false)
  start_time = Time.now
  logger.info('Performing deregister command')
  begin
    # Perform deregister events on each of the file paths provided
    loop do
      f_path = file_selector.next_path
      break if f_path.nil?

      storage_location = @app_manager.location_manager.get_location_by_path(f_path)

      file_rec = FileRecord.new(f_path, storage_location)
      unless file_rec.metadata_present?
        raise DeregistrationError.new("Cannot deregister #{f_path}, file is not registered.")
      end

      @app_manager.md_manager.load(file_rec)

      event = DeregisterEvent.new(file_rec: file_rec, force: force, app_manager: @app_manager)
      track_status(event.perform)
    end
  rescue RegistrationError, DeregistrationError, InvalidStoragePathError, StorageLocationUnavailableError => err
    record_failure(EventNames::DEREGISTER, nil, err.message)
  rescue => err
    record_failure(EventNames::DEREGISTER, error: err)
  end

  logger.info("Completed deregister command in #{Time.now - start_time}s")
  return_status
end