MuranoCLI 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.agignore +1 -0
  3. data/.rubocop.yml +67 -5
  4. data/Gemfile +6 -3
  5. data/MuranoCLI.gemspec +14 -10
  6. data/README.markdown +299 -126
  7. data/Rakefile +6 -1
  8. data/bin/murano +2 -2
  9. data/docs/completions/murano_completion-bash +93 -0
  10. data/lib/MrMurano.rb +19 -2
  11. data/lib/MrMurano/Business.rb +22 -19
  12. data/lib/MrMurano/Config.rb +19 -9
  13. data/lib/MrMurano/Content.rb +4 -4
  14. data/lib/MrMurano/Exchange-Element.rb +99 -0
  15. data/lib/MrMurano/Exchange.rb +137 -0
  16. data/lib/MrMurano/Gateway.rb +9 -9
  17. data/lib/MrMurano/Keystore.rb +4 -2
  18. data/lib/MrMurano/ReCommander.rb +3 -5
  19. data/lib/MrMurano/Solution-ServiceConfig.rb +12 -12
  20. data/lib/MrMurano/Solution-Services.rb +15 -14
  21. data/lib/MrMurano/Solution-Users.rb +2 -2
  22. data/lib/MrMurano/Solution.rb +43 -49
  23. data/lib/MrMurano/SolutionId.rb +28 -28
  24. data/lib/MrMurano/SyncUpDown.rb +32 -22
  25. data/lib/MrMurano/Webservice-Endpoint.rb +2 -1
  26. data/lib/MrMurano/Webservice.rb +5 -5
  27. data/lib/MrMurano/commands.rb +2 -1
  28. data/lib/MrMurano/commands/business.rb +21 -19
  29. data/lib/MrMurano/commands/domain.rb +16 -2
  30. data/lib/MrMurano/commands/exchange.rb +272 -0
  31. data/lib/MrMurano/commands/globals.rb +17 -1
  32. data/lib/MrMurano/commands/init.rb +3 -3
  33. data/lib/MrMurano/commands/link.rb +16 -16
  34. data/lib/MrMurano/commands/postgresql.rb +2 -2
  35. data/lib/MrMurano/commands/show.rb +13 -7
  36. data/lib/MrMurano/commands/solution.rb +23 -17
  37. data/lib/MrMurano/commands/solution_picker.rb +49 -44
  38. data/lib/MrMurano/commands/sync.rb +2 -1
  39. data/lib/MrMurano/commands/timeseries.rb +2 -2
  40. data/lib/MrMurano/commands/tsdb.rb +2 -2
  41. data/lib/MrMurano/hash.rb +19 -7
  42. data/lib/MrMurano/http.rb +12 -2
  43. data/lib/MrMurano/orderedhash.rb +200 -0
  44. data/lib/MrMurano/spec_commander.rb +98 -0
  45. data/lib/MrMurano/verbosing.rb +2 -2
  46. data/lib/MrMurano/version.rb +2 -2
  47. data/spec/Business_spec.rb +8 -6
  48. data/spec/Solution-ServiceConfig_spec.rb +1 -1
  49. data/spec/SyncUpDown_spec.rb +6 -6
  50. data/spec/_workspace.rb +9 -4
  51. data/spec/cmd_business_spec.rb +8 -2
  52. data/spec/cmd_common.rb +266 -25
  53. data/spec/cmd_exchange_spec.rb +118 -0
  54. data/spec/cmd_help_spec.rb +54 -13
  55. data/spec/cmd_init_spec.rb +1 -12
  56. data/spec/cmd_link_spec.rb +94 -72
  57. data/spec/spec_helper.rb +11 -16
  58. metadata +23 -17
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.22 /coding: utf-8
1
+ # Last Modified: 2017.09.11 /coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -40,6 +40,22 @@ global_option('-n', '--dry', %(Do not run actions that make changes)) do
40
40
  $cfg['tool.verbose'] = true
41
41
  end
42
42
 
43
+ global_option('--csv', %(Output as comma-separated values)) do
44
+ $cfg['tool.outformat'] = 'csv'
45
+ end
46
+
47
+ global_option('--json', %(Output as JSON)) do
48
+ $cfg['tool.outformat'] = 'json'
49
+ end
50
+
51
+ global_option('--yaml', %(Output as Yaml)) do
52
+ $cfg['tool.outformat'] = 'yaml'
53
+ end
54
+
55
+ global_option('--pp', %(Output using Ruby pretty-printer)) do
56
+ $cfg['tool.outformat'] = 'pp'
57
+ end
58
+
43
59
  exclude_help = %(
44
60
  Except config values from the specified scope(s).
45
61
  SCOPES can be 1 scope or comma-separated list of
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.17 /coding: utf-8
1
+ # Last Modified: 2017.09.11 /coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -181,12 +181,12 @@ command :init do |c|
181
181
  verbose: true,
182
182
  }
183
183
  # Get/Create Application ID
184
- sol_opts[:match_sid] = options.application_id
184
+ sol_opts[:match_api_id] = options.application_id
185
185
  sol_opts[:match_name] = options.application_name
186
186
  sol_opts[:match_fuzzy] = options.application
187
187
  appl = solution_find_or_create(biz: biz, type: :application, **sol_opts)
188
188
  # Get/Create Product ID
189
- sol_opts[:match_sid] = options.product_id
189
+ sol_opts[:match_api_id] = options.product_id
190
190
  sol_opts[:match_name] = options.product_name
191
191
  sol_opts[:match_fuzzy] = options.product
192
192
  prod = solution_find_or_create(biz: biz, type: :product, **sol_opts)
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.23 /coding: utf-8
1
+ # Last Modified: 2017.09.11 /coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -48,20 +48,20 @@ List the solutions that are linked.
48
48
  biz = MrMurano::Business.new
49
49
  products = biz.products
50
50
  MrMurano::Verbose.whirly_stop
51
- pids = products.map(&:apiId)
51
+ pids = products.map(&:api_id)
52
52
 
53
53
  sol_opts = { biz: biz, type: :application }
54
- sol_opts[:match_sid] = $cfg['application.id'] unless options.all
54
+ sol_opts[:match_api_id] = $cfg['application.id'] unless options.all
55
55
  appl = solution_find_or_create(**sol_opts)
56
56
 
57
57
  if !appl.nil?
58
58
  MrMurano::Verbose.whirly_msg('Fetching application services...')
59
- sercfg = MrMurano::ServiceConfig.new(appl.sid)
59
+ sercfg = MrMurano::ServiceConfig.new(appl.api_id)
60
60
  #scfgs = sercfg.list('?select=service,id,solution_id,script_key,alias')
61
61
  scfgs = sercfg.list
62
62
  MrMurano::Verbose.whirly_stop
63
63
  else
64
- sercfg = MrMurano::ServiceConfig.new(MrMurano::SolutionId::INVALID_SID)
64
+ sercfg = MrMurano::ServiceConfig.new(MrMurano::SolutionId::INVALID_API_ID)
65
65
  scfgs = []
66
66
  end
67
67
 
@@ -150,7 +150,7 @@ def link_solutions(sol_a, sol_b, options)
150
150
  warn_on_conflict = options[:warn_on_conflict] || false
151
151
  verbose = options[:verbose] || false
152
152
 
153
- if sol_a.nil? || sol_a.sid.to_s.empty? || sol_b.nil? || sol_b.sid.to_s.empty?
153
+ if sol_a.nil? || sol_a.api_id.to_s.empty? || sol_b.nil? || sol_b.api_id.to_s.empty?
154
154
  msg = 'Missing Solution(s) (Applications or Products): Nothing to link'
155
155
  if warn_on_conflict
156
156
  sercfg.warning msg
@@ -172,9 +172,9 @@ def link_solutions(sol_a, sol_b, options)
172
172
 
173
173
  # Get services for solution to which being linked (application),
174
174
  # and look for linkee (product) service.
175
- sercfg = MrMurano::ServiceConfig.new(sol_a.sid)
175
+ sercfg = MrMurano::ServiceConfig.new(sol_a.api_id)
176
176
  MrMurano::Verbose.whirly_msg 'Fetching services...'
177
- scfgs = sercfg.search(sol_b.sid)
177
+ scfgs = sercfg.search(sol_b.api_id)
178
178
  svc_cfg_exists = scfgs.any?
179
179
  MrMurano::Verbose.whirly_stop
180
180
 
@@ -182,7 +182,7 @@ def link_solutions(sol_a, sol_b, options)
182
182
  unless svc_cfg_exists
183
183
  MrMurano::Verbose.whirly_msg 'Linking solutions...'
184
184
  # Call Murano.
185
- _ret = sercfg.create(sol_b.sid, sol_b.name) do |request, http|
185
+ _ret = sercfg.create(sol_b.api_id, sol_b.name) do |request, http|
186
186
  response = http.request(request)
187
187
  MrMurano::Verbose.whirly_stop
188
188
  if response.is_a?(Net::HTTPSuccess)
@@ -208,8 +208,8 @@ def link_solutions(sol_a, sol_b, options)
208
208
 
209
209
  # Get event handlers for application, and look for product event handler.
210
210
  MrMurano::Verbose.whirly_msg 'Fetching handlers...'
211
- evthlr = MrMurano::EventHandlerSolnApp.new(sol_a.sid)
212
- hdlrs = evthlr.search(sol_b.sid)
211
+ evthlr = MrMurano::EventHandlerSolnApp.new(sol_a.api_id)
212
+ hdlrs = evthlr.search(sol_b.api_id)
213
213
  evt_hlr_exists = hdlrs.any?
214
214
  MrMurano::Verbose.whirly_stop
215
215
 
@@ -218,7 +218,7 @@ def link_solutions(sol_a, sol_b, options)
218
218
  unless evt_hlr_exists
219
219
  MrMurano::Verbose.whirly_msg 'Setting default event handler...'
220
220
  # Call Murano.
221
- evthlr.default_event_script(sol_b.sid) do |request, http|
221
+ evthlr.default_event_script(sol_b.api_id) do |request, http|
222
222
  response = http.request(request)
223
223
  MrMurano::Verbose.whirly_stop
224
224
  if response.is_a?(Net::HTTPSuccess)
@@ -244,10 +244,10 @@ def link_solutions(sol_a, sol_b, options)
244
244
  end
245
245
 
246
246
  def unlink_solutions(sol_a, sol_b)
247
- sercfg = MrMurano::ServiceConfig.new(sol_a.sid)
247
+ sercfg = MrMurano::ServiceConfig.new(sol_a.api_id)
248
248
  MrMurano::Verbose.whirly_msg 'Fetching services...'
249
249
  #scfgs = sercfg.list('?select=service,id,solution_id,script_key,alias')
250
- scfgs = sercfg.search(sol_b.sid)
250
+ scfgs = sercfg.search(sol_b.api_id)
251
251
  MrMurano::Verbose.whirly_stop
252
252
 
253
253
  if scfgs.length > 1
@@ -272,8 +272,8 @@ def unlink_solutions(sol_a, sol_b)
272
272
  end
273
273
 
274
274
  MrMurano::Verbose.whirly_msg 'Fetching handlers...'
275
- evthlr = MrMurano::EventHandlerSolnApp.new(sol_a.sid)
276
- hdlrs = evthlr.search(sol_b.sid)
275
+ evthlr = MrMurano::EventHandlerSolnApp.new(sol_a.api_id)
276
+ hdlrs = evthlr.search(sol_b.api_id)
277
277
  #evt_hlr_exists = hdlrs.any?
278
278
  MrMurano::Verbose.whirly_stop
279
279
 
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.23 /coding: utf-8
1
+ # Last Modified: 2017.09.11 /coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -10,7 +10,7 @@ require 'MrMurano/Solution-ServiceConfig'
10
10
 
11
11
  module MrMurano
12
12
  class Postgresql < ServiceConfig
13
- def initialize(sid=nil)
13
+ def initialize(api_id=nil)
14
14
  # FIXME/2017-07-03: What soln types have PSQLs?
15
15
  @solntype = 'application.id'
16
16
  super
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.22 /coding: utf-8
1
+ # Last Modified: 2017.09.11 /coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -39,7 +39,10 @@ Show readable information about the current configuration.
39
39
  unless selected_application_id.to_s.empty?
40
40
  MrMurano::Verbose.whirly_start('Fetching Applications...')
41
41
  biz.applications.each do |sol|
42
- selected_application = sol if sol.apiId == selected_application_id
42
+ next unless sol.api_id == selected_application_id
43
+ #next unless [sol.api_id, sol.sid].include?(selected_application_id)
44
+ selected_application = sol
45
+ break
43
46
  end
44
47
  MrMurano::Verbose.whirly_stop
45
48
  end
@@ -49,7 +52,10 @@ Show readable information about the current configuration.
49
52
  unless selected_product_id.to_s.empty?
50
53
  MrMurano::Verbose.whirly_start('Fetching Products...')
51
54
  biz.products.each do |sol|
52
- selected_product = sol if sol.apiId == selected_product_id
55
+ next unless sol.api_id == selected_product_id
56
+ #next unless [sol.api_id, sol.sid].include?(selected_product_id)
57
+ selected_product = sol
58
+ break
53
59
  end
54
60
  MrMurano::Verbose.whirly_stop
55
61
  end
@@ -71,11 +77,11 @@ Show readable information about the current configuration.
71
77
 
72
78
  id_not_in_biz = false
73
79
 
74
- # E.g., {:bizid=>"ABC", :type=>"application", :apiId=>"XXX", :sid=>"XXX",
80
+ # E.g., {:bizid=>"ABC", :type=>"application", :api_id=>"XXX", :sid=>"XXX",
75
81
  # :name=>"ABC", :domain=>"ABC.apps.exosite.io" }
76
82
  if selected_application
77
83
  sol_info = %(application: https://#{selected_application.domain})
78
- sol_info += %( <#{selected_application.sid}>) if options.ids
84
+ sol_info += %( <#{selected_application.api_id}>) if options.ids
79
85
  puts sol_info
80
86
  elsif selected_application_id
81
87
  #puts 'selected application not in business'
@@ -88,11 +94,11 @@ Show readable information about the current configuration.
88
94
  puts 'application ID not found in config'
89
95
  end
90
96
 
91
- # E.g., {:bizid=>"ABC", :type=>"product", :apiId=>"XXX", :sid=>"XXX",
97
+ # E.g., {:bizid=>"ABC", :type=>"product", :api_id=>"XXX", :sid=>"XXX",
92
98
  # :name=>"ABC", :domain=>"ABC.m2.exosite.io" }
93
99
  if selected_product
94
100
  sol_info = %(product: #{selected_product.name})
95
- sol_info += %( <#{selected_product.sid}>) if options.ids
101
+ sol_info += %( <#{selected_product.api_id}>) if options.ids
96
102
  puts sol_info
97
103
  elsif selected_product_id
98
104
  #puts 'selected product not in business'
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.23 /coding: utf-8
1
+ # Last Modified: 2017.09.11 /coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -68,11 +68,11 @@ Create a new solution in the current business.
68
68
 
69
69
  if options.save
70
70
  section = options.type.to_s
71
- $cfg.set("#{section}.id", sol.sid)
71
+ $cfg.set("#{section}.id", sol.api_id)
72
72
  $cfg.set("#{section}.name", sol.name)
73
73
  end
74
74
 
75
- biz.outf(sol.sid)
75
+ biz.outf(sol.api_id)
76
76
  end
77
77
  end
78
78
  alias_command 'create application', 'solution create', '--type', 'application'
@@ -157,7 +157,9 @@ def cmd_solution_del_get_names_and_ids!(biz, args, options)
157
157
  end
158
158
  solz = must_fetch_solutions!(options, args, biz)
159
159
  solz.each do |sol|
160
- nmorids += [[sol.sid, "#{MrMurano::Verbose.fancy_ticks(sol.name)} <#{sol.sid}>", sol]]
160
+ nmorids += [
161
+ [sol.api_id, "#{MrMurano::Verbose.fancy_ticks(sol.name)} <#{sol.api_id}>", sol],
162
+ ]
161
163
  end
162
164
  nmorids
163
165
  end
@@ -217,7 +219,9 @@ def solution_delete(name_or_id, use_sol: nil, type: :all, yes: false)
217
219
  # would return true if, say, sol.meta[:any_key] equaled name_or_id.)
218
220
  unless name_or_id.empty?
219
221
  solz.select! do |sol|
220
- sol.sid == name_or_id || sol.name == name_or_id || sol.domain =~ /#{Regexp.escape(name_or_id)}\./i
222
+ sol.api_id == name_or_id \
223
+ || sol.name == name_or_id \
224
+ || sol.domain =~ /#{Regexp.escape(name_or_id)}\./i
221
225
  end
222
226
  end
223
227
  MrMurano::Verbose.whirly_stop
@@ -255,7 +259,7 @@ def solution_delete(name_or_id, use_sol: nil, type: :all, yes: false)
255
259
  n_deleted += 1
256
260
  # Clear the ID from the config.
257
261
  MrMurano::Config::CFG_SOLUTION_ID_KEYS.each do |keyn|
258
- $cfg.set(keyn, nil) if $cfg[keyn] == sol.sid
262
+ $cfg.set(keyn, nil) if $cfg[keyn] == sol.api_id
259
263
  end
260
264
  end
261
265
  end
@@ -386,30 +390,32 @@ end
386
390
 
387
391
  def cmd_solution_output_solutions(biz, solz, options)
388
392
  if options.idonly
389
- headers = %i[apiId]
390
- solz = solz.map { |row| [row.apiId] }
393
+ headers = %i[api_id]
394
+ solz = solz.map { |row| [row.api_id] }
391
395
  elsif options.brief
392
- #headers = %i[apiId domain]
393
- #solz = solz.map { |row| [row.apiId, row.domain] }
394
- headers = %i[apiId domain name]
395
- solz = solz.map { |row| [row.apiId, row.domain, row.name] }
396
+ #headers = %i[api_id domain]
397
+ #solz = solz.map { |row| [row.api_id, row.domain] }
398
+ headers = %i[api_id sid domain name]
399
+ solz = solz.map { |row| [row.api_id, row.sid, row.domain, row.name] }
396
400
  else
397
401
  headers = (solz.first && solz.first.meta || {}).keys
398
- headers.delete(:sid) if headers.include?(:apiId) && headers.include?(:sid)
402
+ #headers.delete(:sid) if headers.include?(:api_id) && headers.include?(:sid)
399
403
  headers.sort_by! do |hdr|
400
404
  case hdr
401
405
  when :bizid
402
406
  0
403
407
  when :type
404
408
  1
405
- when :apiId
409
+ when :api_id
406
410
  2
407
- when :domain
411
+ when :sid
408
412
  3
409
- when :name
413
+ when :domain
410
414
  4
411
- else
415
+ when :name
412
416
  5
417
+ else
418
+ 6
413
419
  end
414
420
  end
415
421
  solz = solz.map { |row| headers.map { |hdr| row.meta[hdr] } }
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.23 /coding: utf-8
1
+ # Last Modified: 2017.09.11 /coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -99,18 +99,18 @@ def must_fetch_solutions!(options, args=[], biz=nil)
99
99
  if args.any?
100
100
  #raise 'Cannot use options.all and solution pickers' unless options.all.nil?
101
101
  flattened = args.map { |cell| cell.split(',') }.flatten
102
- sid = []
102
+ api_id = []
103
103
  name = []
104
104
  fuzzy = []
105
105
  if options.id
106
- sid = flattened
106
+ api_id = flattened
107
107
  elsif options.name
108
108
  name = flattened
109
109
  else
110
110
  fuzzy = flattened
111
111
  end
112
112
  solz += solution_get_solutions(
113
- biz, options.type, sid: sid, name: name, fuzzy: fuzzy
113
+ biz, options.type, api_id: api_id, name: name, fuzzy: fuzzy
114
114
  )
115
115
  end
116
116
 
@@ -120,35 +120,35 @@ def must_fetch_solutions!(options, args=[], biz=nil)
120
120
  # MAYBE: DRY this code. Rather than copy-paste-find-replace block of code.
121
121
  # See also: any_business_pickers?
122
122
  #
123
- sid = []
123
+ api_id = []
124
124
  name = []
125
125
  fuzzy = []
126
126
  if options.application_id
127
- sid = [options.application_id]
127
+ api_id = [options.application_id]
128
128
  elsif options.application_name
129
129
  name = [options.application_name]
130
130
  elsif options.application
131
131
  fuzzy = [options.application]
132
132
  end
133
- if !sid.empty? || !name.empty? || !fuzzy.empty?
133
+ if !api_id.empty? || !name.empty? || !fuzzy.empty?
134
134
  solz += solution_get_solutions(
135
- biz, :application, sid: sid, name: name, fuzzy: fuzzy
135
+ biz, :application, api_id: api_id, name: name, fuzzy: fuzzy
136
136
  )
137
137
  end
138
138
  #
139
- sid = []
139
+ api_id = []
140
140
  name = []
141
141
  fuzzy = []
142
142
  if options.product_id
143
- sid = [options.product_id]
143
+ api_id = [options.product_id]
144
144
  elsif options.product_name
145
145
  name = [options.product_name]
146
146
  elsif options.product
147
147
  fuzzy = [options.product]
148
148
  end
149
- if !sid.empty? || !name.empty? || !fuzzy.empty?
149
+ if !api_id.empty? || !name.empty? || !fuzzy.empty?
150
150
  solz += solution_get_solutions(
151
- biz, :product, sid: sid, name: name, fuzzy: fuzzy
151
+ biz, :product, api_id: api_id, name: name, fuzzy: fuzzy
152
152
  )
153
153
  end
154
154
  #
@@ -158,12 +158,12 @@ def must_fetch_solutions!(options, args=[], biz=nil)
158
158
  if !options.all
159
159
  if %i[all application].include?(options.type) && $cfg['application.id']
160
160
  solz += solution_get_solutions(
161
- biz, :application, sid: $cfg['application.id']
161
+ biz, :application, api_id: $cfg['application.id']
162
162
  )
163
163
  end
164
164
  if %i[all product].include?(options.type) && $cfg['product.id']
165
165
  solz += solution_get_solutions(
166
- biz, :product, sid: $cfg['product.id']
166
+ biz, :product, api_id: $cfg['product.id']
167
167
  )
168
168
  end
169
169
  else
@@ -173,10 +173,10 @@ def must_fetch_solutions!(options, args=[], biz=nil)
173
173
 
174
174
  culled = {}
175
175
  solz.select! do |sol|
176
- if culled[sol.sid]
176
+ if culled[sol.api_id]
177
177
  false
178
178
  else
179
- culled[sol.sid] = true
179
+ culled[sol.api_id] = true
180
180
  true
181
181
  end
182
182
  end
@@ -238,7 +238,7 @@ def any_product_pickers!(options)
238
238
  num_ways > 0
239
239
  end
240
240
 
241
- def solution_get_solutions(biz, type, sid: nil, name: nil, fuzzy: nil)
241
+ def solution_get_solutions(biz, type, api_id: nil, name: nil, fuzzy: nil)
242
242
  if type == :all
243
243
  inflection = 'solutions'
244
244
  else
@@ -246,7 +246,7 @@ def solution_get_solutions(biz, type, sid: nil, name: nil, fuzzy: nil)
246
246
  end
247
247
  MrMurano::Verbose.whirly_start("Fetching #{inflection}...")
248
248
  solz = biz.solutions(
249
- type: type, sid: sid, name: name, fuzzy: fuzzy, invalidate: false
249
+ type: type, api_id: api_id, name: name, fuzzy: fuzzy, invalidate: false
250
250
  )
251
251
  MrMurano::Verbose.whirly_stop
252
252
  solz
@@ -275,6 +275,11 @@ def solution_ask_for_name(sol)
275
275
  end
276
276
  end
277
277
  sol.name
278
+ rescue EOFError
279
+ # E.g., the user pressed Ctrl-D.
280
+ # "error: The input stream is exhausted."
281
+ MrMurano::Verbose.error('murano out!')
282
+ exit 2
278
283
  end
279
284
 
280
285
  # *** Interact with the user to identify the solution.
@@ -289,21 +294,21 @@ def get_two_solutions!(sol_a_id=nil, sol_b_id=nil, **options)
289
294
  app_srchs = []
290
295
  prd_srchs = []
291
296
 
292
- #app_srchs += [[:application, :sid, sol_a_id]] unless sol_a_id.to_s.empty?
293
- #prd_srchs += [[:product, :sid, sol_b_id]] unless sol_b_id.to_s.empty?
294
- app_srchs += [[nil, :sid, sol_a_id]] unless sol_a_id.to_s.empty?
295
- prd_srchs += [[nil, :sid, sol_b_id]] unless sol_b_id.to_s.empty?
297
+ #app_srchs += [[:application, :api_id, sol_a_id]] unless sol_a_id.to_s.empty?
298
+ #prd_srchs += [[:product, :api_id, sol_b_id]] unless sol_b_id.to_s.empty?
299
+ app_srchs += [[nil, :api_id, sol_a_id]] unless sol_a_id.to_s.empty?
300
+ prd_srchs += [[nil, :api_id, sol_b_id]] unless sol_b_id.to_s.empty?
296
301
 
297
302
  app_srchs += get_soln_searches(:application, options)
298
303
  prd_srchs += get_soln_searches(:product, options)
299
304
 
300
305
  if app_srchs.length.zero? && prd_srchs.length < 2
301
306
  # TEST/2017-08-16: Clear application.id and test.
302
- app_srchs = [[:application, :sid, $cfg['application.id']]]
307
+ app_srchs = [[:application, :api_id, $cfg['application.id']]]
303
308
  end
304
309
  if prd_srchs.length.zero? && app_srchs.length < 2
305
310
  # TEST/2017-08-16: Clear product.id and test.
306
- prd_srchs = [[:product, :sid, $cfg['product.id']]]
311
+ prd_srchs = [[:product, :api_id, $cfg['product.id']]]
307
312
  end
308
313
 
309
314
  sol_srchs = app_srchs + prd_srchs
@@ -318,8 +323,8 @@ def get_two_solutions!(sol_a_id=nil, sol_b_id=nil, **options)
318
323
  sol_srchs.each do |type, desc, value|
319
324
  sol_opts = {}
320
325
  case desc
321
- when :sid
322
- sol_opts[:match_sid] = value
326
+ when :api_id
327
+ sol_opts[:match_api_id] = value
323
328
  when :name
324
329
  sol_opts[:match_name] = value
325
330
  when :term
@@ -340,7 +345,7 @@ def get_soln_searches(sol_type, options)
340
345
  # E.g., :application_id
341
346
  if options["#{sol_type}_id".to_sym]
342
347
  app_ids = options["#{sol_type}_id".to_sym].split(',')
343
- app_ids.each { |sid| sol_srchs += [[sol_type, :sid, sid]] }
348
+ app_ids.each { |api_id| sol_srchs += [[sol_type, :api_id, api_id]] }
344
349
  end
345
350
  # E.g., :application_name
346
351
  if options["#{sol_type}_name".to_sym]
@@ -374,7 +379,7 @@ module MrMurano
374
379
  ignore_cfg: false,
375
380
  verbose: false,
376
381
  match_enable: false,
377
- match_sid: nil,
382
+ match_api_id: nil,
378
383
  match_name: nil,
379
384
  match_fuzzy: nil
380
385
  )
@@ -384,23 +389,23 @@ module MrMurano
384
389
  @ignore_cfg = ignore_cfg
385
390
  @verbose = verbose
386
391
  @match_enable = match_enable
387
- @match_sid = match_sid
392
+ @match_api_id = match_api_id
388
393
  @match_name = match_name
389
394
  @match_fuzzy = match_fuzzy
390
- @match_sid = nil if @match_sid.to_s.empty?
395
+ @match_api_id = nil if @match_api_id.to_s.empty?
391
396
  @match_name = nil if @match_name.to_s.empty?
392
397
  @match_fuzzy = nil if @match_fuzzy.to_s.empty?
393
- @searching = @match_enable && (@match_sid || @match_name || @match_fuzzy)
398
+ @searching = @match_enable && (@match_api_id || @match_name || @match_fuzzy)
394
399
  end
395
400
 
396
401
  def find_or_create(model)
397
402
  # First, try to find the solution by solution ID.
398
- sol = solution_find_by_sid(model)
403
+ sol = solution_find_by_api_id(model)
399
404
  # If not found, search existing solutions, and maybe ask user.
400
405
  if sol.nil?
401
406
  if @searching
402
407
  sol = solution_search_by_term(model)
403
- sol = solution_create_new_solution(model) if sol.nil? && @create_ok && @match_sid.nil?
408
+ sol = solution_create_new_solution(model) if sol.nil? && @create_ok && @match_api_id.nil?
404
409
  else
405
410
  sol = solution_lookup_or_ask(model)
406
411
  end
@@ -408,26 +413,26 @@ module MrMurano
408
413
  # Finally, if asked, update the config.
409
414
  if @update_cfg && !sol.nil?
410
415
  # Update the config in memory and on disk/file.
411
- $cfg.set(sol.cfg_key_id, sol.sid, :project)
416
+ $cfg.set(sol.cfg_key_id, sol.api_id, :project)
412
417
  $cfg.set(sol.cfg_key_name, sol.name, :project)
413
418
  end
414
419
  sol
415
420
  end
416
421
 
417
- def solution_find_by_sid(sol)
422
+ def solution_find_by_api_id(sol)
418
423
  exists = false
419
424
  if @searching || @ignore_cfg
420
- sol.sid = @match_sid || @match_fuzzy
425
+ sol.api_id = @match_api_id || @match_fuzzy
421
426
  else
422
427
  # Note that we verify the solution ID we find in the config,
423
428
  # since the user could've, e.g., deleted it via the web UI.
424
429
  # LATER: This only works so long as there's only one Product
425
430
  # or one Application. Eventually we'll add support for more.
426
- sol.sid = $cfg[sol.cfg_key_id].to_s
431
+ sol.api_id = $cfg[sol.cfg_key_id].to_s
427
432
  return sol if @skip_verify
428
433
  end
429
- if sol.sid?
430
- tried_sid = sol.sid
434
+ if sol.api_id?
435
+ tried_api_id = sol.api_id
431
436
  if @searching
432
437
  whirly_msg = "Searching #{sol.type_name} by ID..."
433
438
  else
@@ -435,12 +440,12 @@ module MrMurano
435
440
  end
436
441
  MrMurano::Verbose.whirly_start(whirly_msg)
437
442
  sol.info_safe
438
- if sol.valid_sid
443
+ if sol.valid_api_id
439
444
  exists = true
440
445
  # Convert from Solution to proper subclass, perhaps.
441
446
  sol = solution_factory_reset(sol)
442
447
  else
443
- sol.sid = nil
448
+ sol.api_id = nil
444
449
  end
445
450
  MrMurano::Verbose.whirly_stop
446
451
  # Spit out some messages, maybe.
@@ -449,8 +454,8 @@ module MrMurano
449
454
  say "Found #{sol.type_name} #{sol.pretty_desc}"
450
455
  elsif !@searching
451
456
  # The solution ID in the config was not found for this business.
452
- tried_sid = MrMurano::Verbose.fancy_ticks(tried_sid)
453
- say "The #{sol.type_name} ID #{tried_sid} from the config was not found"
457
+ tried_api_id = MrMurano::Verbose.fancy_ticks(tried_api_id)
458
+ say "The #{sol.type_name} ID #{tried_api_id} from the config was not found"
454
459
  end
455
460
  puts ''
456
461
  end
@@ -519,7 +524,7 @@ module MrMurano
519
524
 
520
525
  def solution_search_by_term(sol)
521
526
  solz = solution_get_solutions(
522
- sol.biz, sol.type, sid: @match_sid, name: @match_name, fuzzy: @match_fuzzy
527
+ sol.biz, sol.type, api_id: @match_api_id, name: @match_name, fuzzy: @match_fuzzy
523
528
  )
524
529
  if solz.length > 1
525
530
  sol.error("More than one matching #{sol.type_name} found. Please be more specific")