aspera-cli 4.9.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/BUGS.md +20 -0
  4. data/CHANGELOG.md +509 -0
  5. data/CONTRIBUTING.md +118 -0
  6. data/README.md +1241 -916
  7. data/bin/ascli +4 -4
  8. data/bin/asession +11 -11
  9. data/docs/test_env.conf +32 -21
  10. data/examples/aoc.rb +4 -4
  11. data/examples/dascli +16 -9
  12. data/examples/faspex4.rb +8 -8
  13. data/examples/node.rb +12 -12
  14. data/examples/server.rb +10 -10
  15. data/lib/aspera/aoc.rb +273 -266
  16. data/lib/aspera/ascmd.rb +56 -54
  17. data/lib/aspera/ats_api.rb +4 -4
  18. data/lib/aspera/cli/basic_auth_plugin.rb +15 -12
  19. data/lib/aspera/cli/extended_value.rb +5 -5
  20. data/lib/aspera/cli/formater.rb +64 -64
  21. data/lib/aspera/cli/info.rb +2 -2
  22. data/lib/aspera/cli/listener/line_dump.rb +1 -1
  23. data/lib/aspera/cli/listener/logger.rb +1 -1
  24. data/lib/aspera/cli/listener/progress.rb +5 -6
  25. data/lib/aspera/cli/listener/progress_multi.rb +14 -19
  26. data/lib/aspera/cli/main.rb +66 -67
  27. data/lib/aspera/cli/manager.rb +112 -110
  28. data/lib/aspera/cli/plugin.rb +57 -36
  29. data/lib/aspera/cli/plugins/alee.rb +4 -4
  30. data/lib/aspera/cli/plugins/aoc.rb +309 -670
  31. data/lib/aspera/cli/plugins/ats.rb +44 -46
  32. data/lib/aspera/cli/plugins/bss.rb +10 -10
  33. data/lib/aspera/cli/plugins/config.rb +497 -378
  34. data/lib/aspera/cli/plugins/console.rb +12 -12
  35. data/lib/aspera/cli/plugins/cos.rb +18 -20
  36. data/lib/aspera/cli/plugins/faspex.rb +112 -114
  37. data/lib/aspera/cli/plugins/faspex5.rb +71 -46
  38. data/lib/aspera/cli/plugins/node.rb +379 -283
  39. data/lib/aspera/cli/plugins/orchestrator.rb +46 -46
  40. data/lib/aspera/cli/plugins/preview.rb +122 -114
  41. data/lib/aspera/cli/plugins/server.rb +137 -83
  42. data/lib/aspera/cli/plugins/shares.rb +30 -29
  43. data/lib/aspera/cli/plugins/sync.rb +13 -33
  44. data/lib/aspera/cli/transfer_agent.rb +60 -59
  45. data/lib/aspera/cli/version.rb +1 -1
  46. data/lib/aspera/colors.rb +3 -3
  47. data/lib/aspera/command_line_builder.rb +27 -27
  48. data/lib/aspera/cos_node.rb +22 -20
  49. data/lib/aspera/data_repository.rb +1 -1
  50. data/lib/aspera/environment.rb +35 -15
  51. data/lib/aspera/fasp/agent_base.rb +15 -15
  52. data/lib/aspera/fasp/agent_connect.rb +23 -21
  53. data/lib/aspera/fasp/agent_direct.rb +66 -64
  54. data/lib/aspera/fasp/agent_httpgw.rb +141 -78
  55. data/lib/aspera/fasp/agent_node.rb +23 -21
  56. data/lib/aspera/fasp/agent_trsdk.rb +20 -20
  57. data/lib/aspera/fasp/error.rb +3 -2
  58. data/lib/aspera/fasp/error_info.rb +11 -8
  59. data/lib/aspera/fasp/installation.rb +79 -79
  60. data/lib/aspera/fasp/listener.rb +1 -1
  61. data/lib/aspera/fasp/parameters.rb +86 -71
  62. data/lib/aspera/fasp/parameters.yaml +7 -4
  63. data/lib/aspera/fasp/resume_policy.rb +8 -8
  64. data/lib/aspera/fasp/transfer_spec.rb +35 -2
  65. data/lib/aspera/fasp/uri.rb +7 -7
  66. data/lib/aspera/faspex_gw.rb +7 -5
  67. data/lib/aspera/hash_ext.rb +3 -3
  68. data/lib/aspera/id_generator.rb +5 -5
  69. data/lib/aspera/keychain/encrypted_hash.rb +38 -105
  70. data/lib/aspera/keychain/macos_security.rb +128 -57
  71. data/lib/aspera/log.rb +7 -7
  72. data/lib/aspera/nagios.rb +19 -18
  73. data/lib/aspera/node.rb +209 -35
  74. data/lib/aspera/oauth.rb +37 -36
  75. data/lib/aspera/open_application.rb +19 -11
  76. data/lib/aspera/persistency_action_once.rb +4 -4
  77. data/lib/aspera/persistency_folder.rb +16 -15
  78. data/lib/aspera/preview/file_types.rb +8 -8
  79. data/lib/aspera/preview/generator.rb +67 -67
  80. data/lib/aspera/preview/utils.rb +27 -27
  81. data/lib/aspera/proxy_auto_config.js +41 -41
  82. data/lib/aspera/proxy_auto_config.rb +21 -14
  83. data/lib/aspera/rest.rb +72 -67
  84. data/lib/aspera/rest_call_error.rb +2 -1
  85. data/lib/aspera/rest_error_analyzer.rb +18 -17
  86. data/lib/aspera/rest_errors_aspera.rb +16 -16
  87. data/lib/aspera/secret_hider.rb +15 -13
  88. data/lib/aspera/ssh.rb +11 -10
  89. data/lib/aspera/sync.rb +158 -44
  90. data/lib/aspera/temp_file_manager.rb +2 -2
  91. data/lib/aspera/uri_reader.rb +4 -4
  92. data/lib/aspera/web_auth.rb +14 -13
  93. data.tar.gz.sig +0 -0
  94. metadata +11 -36
  95. metadata.gz.sig +0 -0
@@ -12,10 +12,10 @@ module Aspera
12
12
  class CliError < StandardError; end
13
13
 
14
14
  # raised when an unexpected argument is provided
15
- class CliBadArgument < CliError; end
15
+ class CliBadArgument < Aspera::Cli::CliError; end
16
16
 
17
- class CliNoSuchId < CliError
18
- def initialize(res_type,res_id)
17
+ class CliNoSuchId < Aspera::Cli::CliError
18
+ def initialize(res_type, res_id)
19
19
  msg = "No such #{res_type} identifier: #{res_id}"
20
20
  super(msg)
21
21
  end
@@ -23,9 +23,9 @@ module Aspera
23
23
 
24
24
  # option is retrieved from another object using accessor
25
25
  class AttrAccessor
26
- #attr_accessor :object
27
- #attr_accessor :attr_symb
28
- def initialize(object,attr_symb)
26
+ # attr_accessor :object
27
+ # attr_accessor :attr_symb
28
+ def initialize(object, attr_symb)
29
29
  @object = object
30
30
  @attr_symb = attr_symb
31
31
  end
@@ -35,7 +35,7 @@ module Aspera
35
35
  end
36
36
 
37
37
  def value=(val)
38
- @object.send("#{@attr_symb}=",val)
38
+ @object.send("#{@attr_symb}=", val)
39
39
  end
40
40
  end
41
41
 
@@ -44,15 +44,17 @@ module Aspera
44
44
  # resolves on extended value syntax
45
45
  class Manager
46
46
  # boolean options are set to true/false from the following values
47
- TRUE_VALUES = [:yes,true].freeze
48
- BOOLEAN_VALUES = [TRUE_VALUES,:no,false].flatten.freeze
49
- BOOLEAN_SIMPLE = %i[yes no].freeze
47
+ BOOLEAN_SIMPLE = %i[no yes].freeze
48
+ FALSE_VALUES = [BOOLEAN_SIMPLE.first, false].freeze
49
+ TRUE_VALUES = [BOOLEAN_SIMPLE.last, true].freeze
50
+ BOOLEAN_VALUES = [].concat(TRUE_VALUES, FALSE_VALUES).freeze
51
+
50
52
  # option name separator on command line
51
53
  OPTION_SEP_LINE = '-'
52
54
  # option name separator in code (symbol)
53
55
  OPTION_SEP_NAME = '_'
54
56
 
55
- private_constant :TRUE_VALUES,:BOOLEAN_VALUES,:OPTION_SEP_LINE,:OPTION_SEP_NAME
57
+ private_constant :FALSE_VALUES, :TRUE_VALUES, :BOOLEAN_VALUES, :OPTION_SEP_LINE, :OPTION_SEP_NAME
56
58
 
57
59
  class << self
58
60
  def enum_to_bool(enum)
@@ -65,19 +67,19 @@ module Aspera
65
67
  end
66
68
 
67
69
  # find shortened string value in allowed symbol list
68
- def get_from_list(shortval,descr,allowed_values)
70
+ def get_from_list(shortval, descr, allowed_values)
69
71
  # we accept shortcuts
70
72
  matching_exact = allowed_values.select{|i| i.to_s.eql?(shortval)}
71
73
  return matching_exact.first if matching_exact.length == 1
72
74
  matching = allowed_values.select{|i| i.to_s.start_with?(shortval)}
73
- raise CliBadArgument,bad_arg_message_multi("unknown value for #{descr}: #{shortval}",allowed_values) if matching.empty?
74
- raise CliBadArgument,bad_arg_message_multi("ambigous shortcut for #{descr}: #{shortval}",matching) unless matching.length.eql?(1)
75
+ raise CliBadArgument, bad_arg_message_multi("unknown value for #{descr}: #{shortval}", allowed_values) if matching.empty?
76
+ raise CliBadArgument, bad_arg_message_multi("ambigous shortcut for #{descr}: #{shortval}", matching) unless matching.length.eql?(1)
75
77
  return enum_to_bool(matching.first) if allowed_values.eql?(BOOLEAN_VALUES)
76
78
  return matching.first
77
79
  end
78
80
 
79
- def bad_arg_message_multi(error_msg,choices)
80
- return [error_msg,'Use:',choices.map{|c|"- #{c}"}.sort].flatten.join("\n")
81
+ def bad_arg_message_multi(error_msg, choices)
82
+ return [error_msg, 'Use:'].concat(choices.map{|c|"- #{c}"}.sort).join("\n")
81
83
  end
82
84
  end
83
85
 
@@ -85,7 +87,7 @@ module Aspera
85
87
  attr_accessor :ask_missing_mandatory, :ask_missing_optional
86
88
  attr_writer :fail_on_missing_mandatory
87
89
 
88
- def initialize(program_name,argv: nil)
90
+ def initialize(program_name, argv: nil)
89
91
  # command line values not starting with '-'
90
92
  @unprocessed_cmd_line_arguments = []
91
93
  # command line values starting with '-'
@@ -102,30 +104,30 @@ module Aspera
102
104
  # those must be set before parse, parse consumes those defined only
103
105
  @unprocessed_defaults = []
104
106
  @unprocessed_env = []
105
- # Note: was initially inherited but it is prefered to have specific methods
107
+ # NOTE: was initially inherited but it is prefered to have specific methods
106
108
  @parser = OptionParser.new
107
109
  @parser.program_name = program_name
108
110
  # options can also be provided by env vars : --param-name -> ASLMCLI_PARAM_NAME
109
111
  env_prefix = program_name.upcase + OPTION_SEP_NAME
110
- ENV.each do |k,v|
112
+ ENV.each do |k, v|
111
113
  if k.start_with?(env_prefix)
112
- @unprocessed_env.push([k[env_prefix.length..-1].downcase.to_sym,v])
114
+ @unprocessed_env.push([k[env_prefix.length..-1].downcase.to_sym, v])
113
115
  end
114
116
  end
115
- Log.log.debug("env=#{@unprocessed_env}".red)
117
+ Log.log.debug{"env=#{@unprocessed_env}".red}
116
118
  @unprocessed_cmd_line_options = []
117
119
  @unprocessed_cmd_line_arguments = []
118
120
  # argv is nil when help is generated for every plugin
119
121
  unless argv.nil?
120
122
  @parser.separator('')
121
123
  @parser.separator('OPTIONS: global')
122
- set_obj_attr(:interactive,self,:ask_missing_mandatory)
123
- set_obj_attr(:ask_options,self,:ask_missing_optional)
124
- add_opt_boolean(:interactive,'use interactive input of missing params')
125
- add_opt_boolean(:ask_options,'ask even optional options')
124
+ set_obj_attr(:interactive, self, :ask_missing_mandatory)
125
+ set_obj_attr(:ask_options, self, :ask_missing_optional)
126
+ add_opt_boolean(:interactive, 'use interactive input of missing params')
127
+ add_opt_boolean(:ask_options, 'ask even optional options')
126
128
  parse_options!
127
129
  process_options = true
128
- while !argv.empty?
130
+ until argv.empty?
129
131
  value = argv.shift
130
132
  if process_options && value.start_with?('-')
131
133
  if value.eql?('--')
@@ -139,10 +141,10 @@ module Aspera
139
141
  end
140
142
  end
141
143
  @initial_cli_options = @unprocessed_cmd_line_options.dup
142
- Log.log.debug("add_cmd_line_options:commands/args=#{@unprocessed_cmd_line_arguments},options=#{@unprocessed_cmd_line_options}".red)
144
+ Log.log.debug{"add_cmd_line_options:commands/args=#{@unprocessed_cmd_line_arguments},options=#{@unprocessed_cmd_line_options}".red}
143
145
  end
144
146
 
145
- def get_next_command(command_list); return get_next_argument('command',expected: command_list); end
147
+ def get_next_command(command_list); return get_next_argument('command', expected: command_list); end
146
148
 
147
149
  # @param expected is
148
150
  # - Array of allowed value (single value)
@@ -151,10 +153,10 @@ module Aspera
151
153
  # @param mandatory true/false
152
154
  # @param type expected class for result
153
155
  # @return value, list or nil
154
- def get_next_argument(descr,expected: :single,mandatory: true, type: nil)
156
+ def get_next_argument(descr, expected: :single, mandatory: true, type: nil)
155
157
  unless type.nil?
156
158
  raise 'internal: type must be a Class' unless type.is_a?(Class)
157
- descr="#{descr} (#{type})"
159
+ descr = "#{descr} (#{type})"
158
160
  end
159
161
  result = nil
160
162
  if !@unprocessed_cmd_line_arguments.empty?
@@ -169,21 +171,21 @@ module Aspera
169
171
  result = result.first
170
172
  end
171
173
  else
172
- result = self.class.get_from_list(@unprocessed_cmd_line_arguments.shift,descr,expected)
174
+ result = self.class.get_from_list(@unprocessed_cmd_line_arguments.shift, descr, expected)
173
175
  end
174
176
  elsif mandatory
175
177
  # no value provided
176
- result = get_interactive(:argument,descr,expected: expected)
178
+ result = get_interactive(:argument, descr, expected: expected)
177
179
  end
178
- Log.log.debug("#{descr}=#{result}")
180
+ Log.log.debug{"#{descr}=#{result}"}
179
181
  raise "argument shall be #{type.name}" unless type.nil? || result.is_a?(type)
180
182
  return result
181
183
  end
182
184
 
183
185
  # declare option of type :accessor, or :value
184
- def declare_option(option_symbol,type)
185
- Log.log.debug("declare_option: #{option_symbol}: #{type}: skip=#{@declared_options.has_key?(option_symbol)}".green)
186
- if @declared_options.has_key?(option_symbol)
186
+ def declare_option(option_symbol, type)
187
+ Log.log.debug{"declare_option: #{option_symbol}: #{type}: skip=#{@declared_options.key?(option_symbol)}".green}
188
+ if @declared_options.key?(option_symbol)
187
189
  raise "INTERNAL ERROR: option #{option_symbol} already declared. only accessor can be redeclared and ignored" \
188
190
  unless @declared_options[option_symbol][:type].eql?(:accessor)
189
191
  return
@@ -194,23 +196,23 @@ module Aspera
194
196
  end
195
197
 
196
198
  # define option with handler
197
- def set_obj_attr(option_symbol,object,attr_symb,default_value=nil)
198
- Log.log.debug("set attr obj #{option_symbol} (#{object},#{attr_symb})")
199
- declare_option(option_symbol,:accessor)
200
- @declared_options[option_symbol][:accessor] = AttrAccessor.new(object,attr_symb)
201
- set_option(option_symbol,default_value,'default obj attr') if !default_value.nil?
199
+ def set_obj_attr(option_symbol, object, attr_symb, default_value=nil)
200
+ Log.log.debug{"set attr obj #{option_symbol} (#{object},#{attr_symb})"}
201
+ declare_option(option_symbol, :accessor)
202
+ @declared_options[option_symbol][:accessor] = AttrAccessor.new(object, attr_symb)
203
+ set_option(option_symbol, default_value, 'default obj attr') if !default_value.nil?
202
204
  end
203
205
 
204
206
  # set an option value by name, either store value or call handler
205
- def set_option(option_symbol,value,where='default')
206
- if !@declared_options.has_key?(option_symbol)
207
- Log.log.debug("set unknown option: #{option_symbol}")
207
+ def set_option(option_symbol, value, where='default')
208
+ if !@declared_options.key?(option_symbol)
209
+ Log.log.debug{"set unknown option: #{option_symbol}"}
208
210
  raise 'ERROR: cannot set undeclared option'
209
- #declare_option(option_symbol)
211
+ # declare_option(option_symbol)
210
212
  end
211
213
  value = ExtendedValue.instance.evaluate(value)
212
214
  value = Manager.enum_to_bool(value) if @declared_options[option_symbol][:values].eql?(BOOLEAN_VALUES)
213
- Log.log.debug("(#{@declared_options[option_symbol][:type]}/#{where}) set #{option_symbol}=#{value}")
215
+ Log.log.debug{"(#{@declared_options[option_symbol][:type]}/#{where}) set #{option_symbol}=#{value}"}
214
216
  case @declared_options[option_symbol][:type]
215
217
  when :accessor
216
218
  @declared_options[option_symbol][:accessor].value = value
@@ -224,9 +226,9 @@ module Aspera
224
226
  # get an option value by name
225
227
  # either return value or call handler, can return nil
226
228
  # ask interactively if requested/required
227
- def get_option(option_symbol,is_type: :optional)
229
+ def get_option(option_symbol, is_type: :optional)
228
230
  result = nil
229
- if @declared_options.has_key?(option_symbol)
231
+ if @declared_options.key?(option_symbol)
230
232
  case @declared_options[option_symbol][:type]
231
233
  when :accessor
232
234
  result = @declared_options[option_symbol][:accessor].value
@@ -235,41 +237,41 @@ module Aspera
235
237
  else
236
238
  raise 'unknown type'
237
239
  end
238
- Log.log.debug("(#{@declared_options[option_symbol][:type]}) get #{option_symbol}=#{result}")
240
+ Log.log.debug{"(#{@declared_options[option_symbol][:type]}) get #{option_symbol}=#{result}"}
239
241
  end
240
242
  # do not fail for manual generation if option mandatory but not set
241
243
  result = '' if result.nil? && is_type.eql?(:mandatory) && !@fail_on_missing_mandatory
242
- #Log.log.debug("interactive=#{@ask_missing_mandatory}")
244
+ # Log.log.debug{"interactive=#{@ask_missing_mandatory}"}
243
245
  if result.nil?
244
246
  if !@ask_missing_mandatory
245
- raise CliBadArgument,"Missing mandatory option: #{option_symbol}" if is_type.eql?(:mandatory)
247
+ raise CliBadArgument, "Missing mandatory option: #{option_symbol}" if is_type.eql?(:mandatory)
246
248
  elsif @ask_missing_optional || is_type.eql?(:mandatory)
247
249
  # ask_missing_mandatory
248
250
  expected = :single
249
- #print "please enter: #{option_symbol.to_s}"
250
- if @declared_options.has_key?(option_symbol) && @declared_options[option_symbol].has_key?(:values)
251
+ # print "please enter: #{option_symbol.to_s}"
252
+ if @declared_options.key?(option_symbol) && @declared_options[option_symbol].key?(:values)
251
253
  expected = @declared_options[option_symbol][:values]
252
254
  end
253
- result = get_interactive(:option,option_symbol.to_s,expected: expected)
254
- set_option(option_symbol,result,'interactive')
255
+ result = get_interactive(:option, option_symbol.to_s, expected: expected)
256
+ set_option(option_symbol, result, 'interactive')
255
257
  end
256
258
  end
257
259
  return result
258
260
  end
259
261
 
260
262
  # param must be hash
261
- def add_option_preset(preset_hash,op: :push)
262
- Log.log.debug("add_option_preset=#{preset_hash}")
263
+ def add_option_preset(preset_hash, op: :push)
264
+ Log.log.debug{"add_option_preset=#{preset_hash}"}
263
265
  raise "internal error: setting default with no hash: #{preset_hash.class}" if !preset_hash.is_a?(Hash)
264
266
  # incremental override
265
- preset_hash.each{|k,v|@unprocessed_defaults.send(op,[k.to_sym,v])}
267
+ preset_hash.each{|k, v|@unprocessed_defaults.send(op, [k.to_sym, v])}
266
268
  end
267
269
 
268
270
  # define an option with restricted values
269
- def add_opt_list(option_symbol,values,help,*on_args)
270
- declare_option(option_symbol,:value)
271
- Log.log.debug("add_opt_list #{option_symbol}")
272
- on_args.unshift(symbol_to_option(option_symbol,'ENUM'))
271
+ def add_opt_list(option_symbol, values, help, *on_args)
272
+ declare_option(option_symbol, :value)
273
+ Log.log.debug{"add_opt_list #{option_symbol}"}
274
+ on_args.unshift(symbol_to_option(option_symbol, 'ENUM'))
273
275
  # this option value must be a symbol
274
276
  @declared_options[option_symbol][:values] = values
275
277
  value = get_option(option_symbol)
@@ -279,47 +281,47 @@ module Aspera
279
281
  end
280
282
  on_args.push(values)
281
283
  on_args.push("#{help}: #{help_values}")
282
- Log.log.debug("on_args=#{on_args}")
283
- @parser.on(*on_args){|v|set_option(option_symbol,self.class.get_from_list(v.to_s,help,values),'cmdline')}
284
+ Log.log.debug{"on_args=#{on_args}"}
285
+ @parser.on(*on_args){|v|set_option(option_symbol, self.class.get_from_list(v.to_s, help, values), 'cmdline')}
284
286
  end
285
287
 
286
- def add_opt_boolean(option_symbol,help,*on_args)
287
- add_opt_list(option_symbol,BOOLEAN_VALUES,help,*on_args)
288
+ def add_opt_boolean(option_symbol, help, *on_args)
289
+ add_opt_list(option_symbol, BOOLEAN_VALUES, help, *on_args)
288
290
  # if default was defined for obj, it may still be enum (yes/no) instead of boolean
289
- default_value=get_option(option_symbol)
290
- set_option(option_symbol,default_value,'opt boolean') unless default_value.nil?
291
+ default_value = get_option(option_symbol)
292
+ set_option(option_symbol, default_value, 'opt boolean') unless default_value.nil?
291
293
  end
292
294
 
293
295
  # define an option with open values
294
- def add_opt_simple(option_symbol,*on_args)
295
- declare_option(option_symbol,:value)
296
- Log.log.debug("add_opt_simple #{option_symbol}")
297
- on_args.unshift(symbol_to_option(option_symbol,'VALUE'))
298
- Log.log.debug("on_args=#{on_args}")
299
- @parser.on(*on_args) { |v| set_option(option_symbol,v,'cmdline') }
296
+ def add_opt_simple(option_symbol, *on_args)
297
+ declare_option(option_symbol, :value)
298
+ Log.log.debug{"add_opt_simple #{option_symbol}"}
299
+ on_args.unshift(symbol_to_option(option_symbol, 'VALUE'))
300
+ Log.log.debug{"on_args=#{on_args}"}
301
+ @parser.on(*on_args) { |v| set_option(option_symbol, v, 'cmdline') }
300
302
  end
301
303
 
302
304
  # define an option with date format
303
- def add_opt_date(option_symbol,*on_args)
304
- declare_option(option_symbol,:value)
305
- Log.log.debug("add_opt_date #{option_symbol}")
306
- on_args.unshift(symbol_to_option(option_symbol,'DATE'))
307
- Log.log.debug("on_args=#{on_args}")
305
+ def add_opt_date(option_symbol, *on_args)
306
+ declare_option(option_symbol, :value)
307
+ Log.log.debug{"add_opt_date #{option_symbol}"}
308
+ on_args.unshift(symbol_to_option(option_symbol, 'DATE'))
309
+ Log.log.debug{"on_args=#{on_args}"}
308
310
  @parser.on(*on_args) do |v|
309
311
  case v
310
- when 'now' then set_option(option_symbol,Manager.time_to_string(Time.now),'cmdline')
311
- when /^-([0-9]+)h/ then set_option(option_symbol,Manager.time_to_string(Time.now - (3600 * Regexp.last_match(1).to_i)),'cmdline')
312
- else set_option(option_symbol,v,'cmdline')
312
+ when 'now' then set_option(option_symbol, Manager.time_to_string(Time.now), 'cmdline')
313
+ when /^-([0-9]+)h/ then set_option(option_symbol, Manager.time_to_string(Time.now - (Regexp.last_match(1).to_i * 3600)), 'cmdline')
314
+ else set_option(option_symbol, v, 'cmdline')
313
315
  end
314
316
  end
315
317
  end
316
318
 
317
319
  # define an option without value
318
- def add_opt_switch(option_symbol,*on_args,&block)
319
- Log.log.debug("add_opt_on #{option_symbol}")
320
- on_args.unshift(symbol_to_option(option_symbol,nil))
321
- Log.log.debug("on_args=#{on_args}")
322
- @parser.on(*on_args,&block)
320
+ def add_opt_switch(option_symbol, *on_args, &block)
321
+ Log.log.debug{"add_opt_on #{option_symbol}"}
322
+ on_args.unshift(symbol_to_option(option_symbol, nil))
323
+ Log.log.debug{"on_args=#{on_args}"}
324
+ @parser.on(*on_args, &block)
323
325
  end
324
326
 
325
327
  # check if there were unprocessed values to generate error
@@ -345,13 +347,13 @@ module Aspera
345
347
  when /^--([^=]+)=(.*)$/
346
348
  name = Regexp.last_match(1)
347
349
  value = Regexp.last_match(2)
348
- name.gsub!(OPTION_SEP_LINE,OPTION_SEP_NAME)
350
+ name.gsub!(OPTION_SEP_LINE, OPTION_SEP_NAME)
349
351
  value = ExtendedValue.instance.evaluate(value)
350
- Log.log.debug("option #{name}=#{value}")
352
+ Log.log.debug{"option #{name}=#{value}"}
351
353
  result[name] = value
352
354
  @unprocessed_cmd_line_options.delete(optionval) if remove_from_remaining
353
355
  else
354
- raise CliBadArgument,"wrong option format: #{optionval}"
356
+ raise CliBadArgument, "wrong option format: #{optionval}"
355
357
  end
356
358
  end
357
359
  return result
@@ -360,7 +362,7 @@ module Aspera
360
362
  # return options as taken from config file and command line just before command execution
361
363
  def declared_options(only_defined: false)
362
364
  result = {}
363
- @declared_options.keys.each do |option_symb|
365
+ @declared_options.each_key do |option_symb|
364
366
  v = get_option(option_symb)
365
367
  result[option_symb.to_s] = v unless only_defined && v.nil?
366
368
  end
@@ -371,8 +373,8 @@ module Aspera
371
373
  def parse_options!
372
374
  Log.log.debug('parse_options!'.red)
373
375
  # first conf file, then env var
374
- apply_options_preset(@unprocessed_defaults,'file')
375
- apply_options_preset(@unprocessed_env,'env')
376
+ apply_options_preset(@unprocessed_defaults, 'file')
377
+ apply_options_preset(@unprocessed_env, 'env')
376
378
  # command line override
377
379
  unknown_options = []
378
380
  begin
@@ -381,28 +383,28 @@ module Aspera
381
383
  @parser.parse!(@unprocessed_cmd_line_options)
382
384
  Log.log.debug('After parse'.red)
383
385
  rescue OptionParser::InvalidOption => e
384
- Log.log.debug("InvalidOption #{e}".red)
386
+ Log.log.debug{"InvalidOption #{e}".red}
385
387
  # save for later processing
386
388
  unknown_options.push(e.args.first)
387
389
  retry
388
390
  end
389
- Log.log.debug("remains: #{unknown_options}")
391
+ Log.log.debug{"remains: #{unknown_options}"}
390
392
  # set unprocessed options for next time
391
393
  @unprocessed_cmd_line_options = unknown_options
392
394
  end
393
395
 
394
396
  private
395
397
 
396
- def prompt_user_input(prompt,sensitive)
398
+ def prompt_user_input(prompt, sensitive)
397
399
  return $stdin.getpass("#{prompt}> ") if sensitive
398
400
  print("#{prompt}> ")
399
401
  return $stdin.gets.chomp
400
402
  end
401
403
 
402
- def get_interactive(type,descr,expected: :single)
404
+ def get_interactive(type, descr, expected: :single)
403
405
  if !@ask_missing_mandatory
404
- raise CliBadArgument,self.class.bad_arg_message_multi("missing: #{descr}",expected) if expected.is_a?(Array)
405
- raise CliBadArgument,"missing argument (#{expected}): #{descr}"
406
+ raise CliBadArgument, self.class.bad_arg_message_multi("missing: #{descr}", expected) if expected.is_a?(Array)
407
+ raise CliBadArgument, "missing argument (#{expected}): #{descr}"
406
408
  end
407
409
  result = nil
408
410
  sensitive = type.eql?(:option) && @declared_options[descr.to_sym][:sensitive]
@@ -413,21 +415,21 @@ module Aspera
413
415
  result = []
414
416
  puts(' (one per line, end with empty line)')
415
417
  loop do
416
- entry = prompt_user_input(default_prompt,sensitive)
418
+ entry = prompt_user_input(default_prompt, sensitive)
417
419
  break if entry.empty?
418
420
  result.push(ExtendedValue.instance.evaluate(entry))
419
421
  end
420
422
  when :single
421
- result = ExtendedValue.instance.evaluate(prompt_user_input(default_prompt,sensitive))
423
+ result = ExtendedValue.instance.evaluate(prompt_user_input(default_prompt, sensitive))
422
424
  else # one fixed
423
- result = self.class.get_from_list(prompt_user_input("#{expected.join(' ')}\n#{default_prompt}",sensitive),descr,expected)
425
+ result = self.class.get_from_list(prompt_user_input("#{expected.join(' ')}\n#{default_prompt}", sensitive), descr, expected)
424
426
  end
425
427
  return result
426
428
  end
427
429
 
428
430
  # generate command line option from option symbol
429
- def symbol_to_option(symbol,opt_val)
430
- result = '--' + symbol.to_s.gsub(OPTION_SEP_NAME,OPTION_SEP_LINE)
431
+ def symbol_to_option(symbol, opt_val)
432
+ result = '--' + symbol.to_s.gsub(OPTION_SEP_NAME, OPTION_SEP_LINE)
431
433
  result = result + '=' + opt_val unless opt_val.nil?
432
434
  return result
433
435
  end
@@ -436,16 +438,16 @@ module Aspera
436
438
  $stdout.isatty ? value.to_s.red.bold : "[#{value}]"
437
439
  end
438
440
 
439
- def apply_options_preset(preset,where)
441
+ def apply_options_preset(preset, where)
440
442
  unprocessed = []
441
443
  preset.each do |pair|
442
- k,v = *pair
443
- if @declared_options.has_key?(k)
444
+ k, v = *pair
445
+ if @declared_options.key?(k)
444
446
  # constrained parameters as string are revert to symbol
445
- if @declared_options[k].has_key?(:values) && v.is_a?(String)
446
- v = self.class.get_from_list(v,k.to_s + " in #{where}",@declared_options[k][:values])
447
+ if @declared_options[k].key?(:values) && v.is_a?(String)
448
+ v = self.class.get_from_list(v, k.to_s + " in #{where}", @declared_options[k][:values])
447
449
  end
448
- set_option(k,v,where)
450
+ set_option(k, v, where)
449
451
  else
450
452
  unprocessed.push(pair)
451
453
  end