Module: Imap::Backup::CLI::Helpers

Included in:
Imap::Backup::CLI, Backup, Local, Local::Check, Migrate, Mirror, Remote, Restore, Setup, Single, Stats, Transfer, Utils
Defined in:
lib/imap/backup/cli/helpers.rb

Overview

Provides helper methods for CLI classes

Constant Summary collapse

NAMESPACE_CONFIGURATION_DESCRIPTION =

Returns a description of the namespace configuration.

Returns:

  • (String)

    a description of the namespace configuration

<<~DESC.freeze
  Some IMAP servers use namespaces (i.e. prefixes like "INBOX"),
  while others, while others concatenate the names of subfolders
  with a charater ("delimiter") other than "/".

  In these cases there are two choices.

  You can use the `--automatic-namespaces` option.
  This will query the source and detination servers for their
  namespace configuration and will adapt paths accordingly.
  This option requires that both the source and destination
  servers are available and work with the provided parameters
  and authentication.

  If automatic configuration does not work as desired, there are the
  `--source-prefix=`, `--source-delimiter=`,
  `--destination-prefix=` and `--destination-delimiter=` parameters.
  To check what values you should use, check the output of the
  `imap-backup remote namespaces EMAIL` command.
DESC

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



14
15
16
17
# File 'lib/imap/backup/cli/helpers.rb', line 14

def self.included(base)
  options = CLI::Options.new(base: base)
  options.define_options
end

Instance Method Details

#account(config, email) ⇒ Account

Returns the Account information for the email address.

Returns:

  • (Account)

    the Account information for the email address

Raises:

  • (RuntimeError)

    if the account does not exist



79
80
81
82
83
84
# File 'lib/imap/backup/cli/helpers.rb', line 79

def (config, email)
   = config.accounts.find { |a| a.username == email }
  raise "#{email} is not a configured account" if !

  
end

#load_config(**options) ⇒ Configuration

Loads the application configuration

Returns:

Raises:



64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/imap/backup/cli/helpers.rb', line 64

def load_config(**options)
  path = options[:config]
  require_exists = options.key?(:require_exists) ? options[:require_exists] : true
  if require_exists
    exists = Configuration.exist?(path: path)
    if !exists
      expected = path || Configuration.default_pathname
      raise ConfigurationNotFound, "Configuration file '#{expected}' not found"
    end
  end
  Configuration.new(path: path)
end

#optionsHash

Processes command-line parameters

Returns:

  • (Hash)

    the supplied command-line parameters with with hyphens in keys replaced by underscores and the keys converted to Symbols



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/imap/backup/cli/helpers.rb', line 45

def options
  @symbolized_options ||= # rubocop:disable Naming/MemoizedInstanceVariableName
    begin
      options = super
      options.each.with_object({}) do |(k, v), acc|
        key =
          if k.is_a?(String)
            k.gsub("-", "_").intern
          else
            k
          end
        acc[key] = v
      end
    end
end

#requested_accounts(config) ⇒ Array<Account>

If email addresses have been specified returns the Account configurations for them. If non have been specified, returns all account configurations

Returns:

  • (Array<Account>)

    If email addresses have been specified returns the Account configurations for them. If non have been specified, returns all account configurations



89
90
91
92
93
94
95
96
# File 'lib/imap/backup/cli/helpers.rb', line 89

def requested_accounts(config)
  emails = (options[:accounts] || "").split(",")
  if emails.any?
    config.accounts.filter { |a| emails.include?(a.username) }
  else
    config.accounts
  end
end