Module: Aspera::Cli::PresetActions

Included in:
Aspera::Cli::Plugins::Config
Defined in:
lib/aspera/cli/preset_actions.rb

Overview

Mixin for Config plugin: preset CRUD actions

Constant Summary collapse

GLOBAL_DEFAULT_KEYWORD =

Used to identify the global default preset keyword

'GLOBAL'
CONF_OVERVIEW_KEYS =

Display columns for preset overview

%w[preset parameter value].freeze

Instance Method Summary collapse

Instance Method Details

#action_preset_ask(name:, option_names:) ⇒ Object



146
147
148
149
150
151
152
153
154
155
156
# File 'lib/aspera/cli/preset_actions.rb', line 146

def action_preset_ask(name:, option_names:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  cp[name] ||= {}
  option_names.each do |option_name|
    option_value = options.get_interactive(option_name, check_option: true)
    cp[name][option_name] = option_value
    secure_preset_option(cp[name], name, option_name)
  end
  Result::Status.new("Updated: #{name}")
end

#action_preset_delete(name:) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/aspera/cli/preset_actions.rb', line 91

def action_preset_delete(name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  raise "no such preset: #{name}" unless cp.key?(name)
  cp.delete(name)
  Result::Status.new("Deleted: #{name}")
end

#action_preset_get(name:, param_name:) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
# File 'lib/aspera/cli/preset_actions.rb', line 99

def action_preset_get(name:, param_name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  raise "no such preset: #{name}" unless cp.key?(name)
  value = cp[name][param_name]
  raise "no such option in preset #{name} : #{param_name}" if value.nil?
  case value
  when Numeric, String then return Result::Text.new(ExtendedValue.instance.evaluate(value.to_s, context: 'preset'))
  end
  Result::SingleObject.new(value)
end

#action_preset_initialize(name:, config_value:) ⇒ Object



127
128
129
130
131
132
133
# File 'lib/aspera/cli/preset_actions.rb', line 127

def action_preset_initialize(name:, config_value:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  Log.log.warn { "configuration already exists: #{name}, overwriting" } if cp.key?(name)
  cp[name] = config_value
  Result::Status.new("Modified: #{@option_config_file}")
end

#action_preset_listObject



14
15
16
# File 'lib/aspera/cli/preset_actions.rb', line 14

def action_preset_list(**)
  Result::ValueList.new(presets.config_presets.keys, name: 'name')
end

#action_preset_lookupObject



32
33
34
35
36
37
38
39
# File 'lib/aspera/cli/preset_actions.rb', line 32

def action_preset_lookup(**)
  Plugins::BasicAuth.declare_options(options, parse: true)
  url = options.get_option(:url, mandatory: true)
  user = options.get_option(:username, mandatory: true)
  result = presets.lookup_preset(url: url, username: user)
  Aspera.assert(!result.nil?, type: Error) { 'no such config found' }
  Result::SingleObject.new(result)
end

#action_preset_overviewObject



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/aspera/cli/preset_actions.rb', line 18

def action_preset_overview(**)
  cp = presets.config_presets
  # Display process modifies the value (hide secrets): we do not want to save removed secrets
  data = PresetManager.deep_clone(cp)
  formatter.hide_secrets(data)
  result = []
  data.each do |config, preset|
    preset.each do |parameter, value|
      result.push(CONF_OVERVIEW_KEYS.zip([config, parameter, value]).to_h)
    end
  end
  Result::ObjectList.new(result, fields: CONF_OVERVIEW_KEYS)
end

#action_preset_secure(config_name: nil) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/aspera/cli/preset_actions.rb', line 41

def action_preset_secure(config_name: nil, **)
  cp = presets.config_presets
  preset_names = config_name.nil? ? cp.keys : [config_name]
  preset_names.each do |preset_name|
    preset = cp[preset_name]
    next unless preset.is_a?(Hash)
    preset.each_key do |option_name|
      secure_preset_option(preset, preset_name, option_name)
    end
  end
  Result::Status.new('Secrets secured in vault: Make sure to save the vault password securely.')
end

#action_preset_set(name:, param_name:, param_value:) ⇒ Object



119
120
121
122
123
124
125
# File 'lib/aspera/cli/preset_actions.rb', line 119

def action_preset_set(name:, param_name:, param_value:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  param_name = Parser.option_line_to_name(param_name)
  presets.set_key(name, param_name, Parser.smart_convert(param_value))
  secure_preset_option(presets.config_presets[name], name, param_name)
  Result::Nothing.new
end

#action_preset_show(name:) ⇒ Object



84
85
86
87
88
89
# File 'lib/aspera/cli/preset_actions.rb', line 84

def action_preset_show(name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  raise "no such preset: #{name}" unless cp.key?(name)
  Result::SingleObject.new(PresetManager.deep_clone(cp[name]))
end

#action_preset_unset(name:, param_name:) ⇒ Object



111
112
113
114
115
116
117
# File 'lib/aspera/cli/preset_actions.rb', line 111

def action_preset_unset(name:, param_name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  raise "no such preset: #{name}" unless cp.key?(name)
  cp[name].delete(param_name)
  Result::Status.new("Removed: #{name}: #{param_name}")
end

#action_preset_update(name:) ⇒ Object



135
136
137
138
139
140
141
142
143
144
# File 'lib/aspera/cli/preset_actions.rb', line 135

def action_preset_update(name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  unprocessed_options = options.unprocessed_options_with_value
  Log.dump(:opts, unprocessed_options)
  cp = presets.config_presets
  cp[name] ||= {}
  cp[name].merge!(unprocessed_options)
  unprocessed_options.each_key { |k| secure_preset_option(cp[name], name, k) }
  Result::Status.new("Updated: #{name}")
end