Sha256: 3ae33ab66309f628f03170fb753a309410a7eef0abb964da4dc36c5900f6649e

Contents?: true

Size: 1.39 KB

Versions: 10

Compression:

Stored size: 1.39 KB

Contents

require "net/imap"
require "thor"

require "imap/backup/account/backup"
require "imap/backup/cli/helpers"
require "imap/backup/logger"

module Imap; end

module Imap::Backup
  class CLI < Thor; end

  class CLI::Backup < Thor
    include Thor::Actions
    include CLI::Helpers

    attr_reader :options

    def initialize(options)
      super([])
      @options = options
    end

    no_commands do
      def run
        config = load_config(**options)
        exit_code = nil
        accounts = requested_accounts(config)
        if accounts.none?
          Logger.logger.warn "No matching accounts found to backup"
          return
        end
        accounts.each do |account|
          backup = Account::Backup.new(account: account, refresh: refresh)
          backup.run
        rescue StandardError => e
          exit_code ||= choose_exit_code(e)
          message = <<~ERROR
            Backup for account '#{account.username}' failed with error #{e}
            #{e.backtrace.join("\n")}
          ERROR
          Logger.logger.error message
          next
        end
        exit(exit_code) if exit_code
      end

      def refresh
        options.key?(:refresh) ? !!options[:refresh] : false
      end

      def choose_exit_code(exception)
        case exception
        when Net::IMAP::NoResponseError, Errno::ECONNREFUSED
          111
        else
          1
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
imap-backup-14.4.1 lib/imap/backup/cli/backup.rb
imap-backup-14.4.0 lib/imap/backup/cli/backup.rb
imap-backup-14.3.0 lib/imap/backup/cli/backup.rb
imap-backup-14.2.0 lib/imap/backup/cli/backup.rb
imap-backup-14.1.1 lib/imap/backup/cli/backup.rb
imap-backup-14.1.0 lib/imap/backup/cli/backup.rb
imap-backup-14.0.0 lib/imap/backup/cli/backup.rb
imap-backup-13.4.0 lib/imap/backup/cli/backup.rb
imap-backup-13.3.0 lib/imap/backup/cli/backup.rb
imap-backup-13.2.0 lib/imap/backup/cli/backup.rb