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

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

Overview

Provides helper methods for CLI classes

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/imap/backup/cli/helpers.rb', line 13

def self.included(base)
  base.class_eval do
    def self.accounts_option
      method_option(
        "accounts",
        type: :string,
        desc: "a comma-separated list of accounts (defaults to all configured accounts)",
        aliases: ["-a"]
      )
    end

    def self.config_option
      method_option(
        "config",
        type: :string,
        desc: "supply the configuration file path (default: ~/.imap-backup/config.json)",
        aliases: ["-c"]
      )
    end

    def self.format_option
      method_option(
        "format",
        type: :string,
        desc: "the output type, 'text' for plain text or 'json'",
        aliases: ["-f"]
      )
    end

    def self.quiet_option
      method_option(
        "quiet",
        type: :boolean,
        desc: "silence all output",
        aliases: ["-q"]
      )
    end

    def self.refresh_option
      method_option(
        "refresh",
        type: :boolean,
        desc: "in the default 'keep all emails' mode, " \
              "updates flags for messages that are already downloaded",
        aliases: ["-r"]
      )
    end

    def self.verbose_option
      method_option(
        "verbose",
        type: :boolean,
        desc:
          "increase the amount of logging. " \
          "Without this option, the program gives minimal output. " \
          "Using this option once gives more detailed output. " \
          "Whereas, using this option twice also shows all IMAP network calls",
        aliases: ["-v"],
        repeatable: true
      )
    end
  end
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



115
116
117
118
119
120
# File 'lib/imap/backup/cli/helpers.rb', line 115

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:



100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/imap/backup/cli/helpers.rb', line 100

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



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/imap/backup/cli/helpers.rb', line 81

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



125
126
127
128
129
130
131
132
# File 'lib/imap/backup/cli/helpers.rb', line 125

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