eco-helpers 2.7.2 → 2.7.4

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -3
  3. data/eco-helpers.gemspec +1 -1
  4. data/lib/eco/api/common/loaders/base.rb +4 -3
  5. data/lib/eco/api/common/loaders/config/workflow/mailer.rb +2 -2
  6. data/lib/eco/api/common/loaders/parser.rb +1 -0
  7. data/lib/eco/api/common/people/default_parsers/csv_parser.rb +47 -33
  8. data/lib/eco/api/common/people/default_parsers/login_providers_parser.rb +1 -1
  9. data/lib/eco/api/common/people/default_parsers/xls_parser.rb +8 -2
  10. data/lib/eco/api/common/people/default_parsers.rb +0 -11
  11. data/lib/eco/api/common/people/person_attribute_parser.rb +2 -1
  12. data/lib/eco/api/common/people/person_entry.rb +4 -2
  13. data/lib/eco/api/session/batch/errors.rb +43 -44
  14. data/lib/eco/api/session.rb +9 -2
  15. data/lib/eco/api/usecases/default/locations/csv_to_tree_case.rb +1 -1
  16. data/lib/eco/api/usecases/default/people/set_default_tag_case.rb +2 -2
  17. data/lib/eco/api/usecases/default/people/supers_cyclic_identify_case.rb +15 -17
  18. data/lib/eco/api/usecases/default/people/switch_supervisor_case.rb +26 -20
  19. data/lib/eco/api/usecases/default/people/transfer_account_case.rb +86 -70
  20. data/lib/eco/api/usecases/default_cases/hris_case.rb +1 -1
  21. data/lib/eco/api/usecases/default_cases/to_csv_case.rb +7 -7
  22. data/lib/eco/api/usecases/graphql/helpers/location/command.rb +1 -1
  23. data/lib/eco/api/usecases/graphql/samples/location/command/service/tree_update.rb +73 -65
  24. data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff.rb +7 -1
  25. data/lib/eco/api/usecases/graphql/samples/location/service/tree_to_list/output.rb +1 -0
  26. data/lib/eco/api/usecases/graphql/samples/location/service/tree_to_list.rb +1 -0
  27. data/lib/eco/api/usecases/ooze_cases/export_register_case.rb +1 -1
  28. data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +13 -9
  29. data/lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb +4 -4
  30. data/lib/eco/api/usecases/ooze_samples/register_export_case.rb +9 -6
  31. data/lib/eco/api/usecases/ooze_samples/register_migration_case.rb +5 -5
  32. data/lib/eco/api/usecases/ooze_samples/register_update_case.rb +7 -5
  33. data/lib/eco/api/usecases/ooze_samples/target_oozes_update_case.rb +2 -2
  34. data/lib/eco/api/usecases.rb +19 -13
  35. data/lib/eco/cli/scripting/args_helpers.rb +2 -0
  36. data/lib/eco/data/files/helpers.rb +25 -12
  37. data/lib/eco/data/hashes/sanke_camel_indifferent_access.rb +0 -5
  38. data/lib/eco/language/models/parser_serializer.rb +4 -2
  39. data/lib/eco/version.rb +1 -1
  40. metadata +3 -3
@@ -2,22 +2,24 @@ class Eco::API::UseCases::Default::People::SwitchSupervisorCase < Eco::API::Comm
2
2
  name "switch-supervisor"
3
3
  type :transform
4
4
 
5
- def main(people, session, options, usecase)
5
+ def main(people, session, _options, usecase)
6
6
  supers = session.new_job("main", "supers", :update, usecase, :core)
7
7
 
8
- old_sup, new_sup = get_supers(people).tap do |supers|
9
- inform(*supers, session.logger)
8
+ old_sup, new_sup = get_supers(people).tap do |sups|
9
+ inform(*sups)
10
10
  end
11
11
 
12
12
  micro.with_each_subordinate(old_sup, people) do |subordinate|
13
13
  subordinate.supervisor_id = new_sup&.id
14
14
  supers.add(subordinate)
15
15
  end.tap do |subordinates|
16
- unless subordinates.length > 0
17
- sup_str = "#{old_sup.external_id} (#{old_sup.name} - #{old_sup.email})"
18
- session.logger.error("There are no subordinates for supervisor #{sup_str}. Aborting...")
19
- exit(1)
20
- end
16
+ next unless subordinates.empty?
17
+
18
+ sup_str = "#{old_sup.external_id} (#{old_sup.name} - #{old_sup.email})"
19
+ log(:error) {
20
+ "There are no subordinates for supervisor #{sup_str}. Aborting..."
21
+ }
22
+ exit(1)
21
23
  end
22
24
  end
23
25
 
@@ -26,43 +28,47 @@ class Eco::API::UseCases::Default::People::SwitchSupervisorCase < Eco::API::Comm
26
28
  def get_supers(people)
27
29
  micro = session.micro
28
30
  old_id, new_id = get_super_ids(options)
29
- old_sup, new_sup = [nil, nil]
31
+ old_sup, new_sup = [nil, nil] # rubocop:disable Style/ParallelAssignment
30
32
 
31
33
  micro.with_supervisor(old_id, people) do |supervisor|
32
- unless old_sup = supervisor
33
- session.logger.error("Couldn't find any user with that id (old-super): '#{old_id}'. Aborting...")
34
+ unless (old_sup = supervisor)
35
+ log(:error) {
36
+ "Couldn't find any user with that id (old-super): '#{old_id}'. Aborting..."
37
+ }
34
38
  exit(1)
35
39
  end
36
40
  end
37
41
 
38
42
  micro.with_supervisor(new_id, people) do |supervisor|
39
- unless new_sup = supervisor
40
- session.logger.error("Couldn't find any user with that id (new-super): '#{new_id}'. Aborting...")
41
- exit(1)
42
- end
43
+ next if (new_sup = supervisor)
44
+
45
+ log(:error) {
46
+ "Couldn't find any user with that id (new-super): '#{new_id}'. Aborting..."
47
+ }
48
+ exit(1)
43
49
  end
44
50
 
45
51
  [old_sup, new_sup]
46
52
  end
47
53
 
48
54
  def get_super_ids(options)
49
- unless old_id = options.dig(:super, :old)
50
- session.logger.error("You haven't specified the original supervisor. Aborting...")
55
+ unless (old_id = options.dig(:super, :old))
56
+ log(:error) { "You haven't specified the original supervisor. Aborting..." }
51
57
  exit(1)
52
58
  end
53
59
 
54
60
  # we could be setting the supervisor to nil
55
61
  unless options[:super].key?(:new)
56
- session.logger.error("You haven't specified the new supervisor. Aborting...")
62
+ log(:error) { "You haven't specified the new supervisor. Aborting..." }
57
63
  exit(1)
58
64
  end
59
65
 
60
66
  [old_id, options.dig(:super, :new)]
61
67
  end
62
68
 
63
- def inform(old_sup, new_sup, logger)
69
+ def inform(old_sup, new_sup)
64
70
  msg = "Switching supervisor '#{old_sup.name}' (#{old_sup.external_id}) "
65
71
  msg += "to '#{new_sup&.name}' (#{new_sup&.external_id})"
66
- logger.info(msg)
72
+ log(:info) { msg }
67
73
  end
68
74
  end
@@ -6,7 +6,8 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
6
6
  # * **invocation command**: `-transfer-account-from`
7
7
  #
8
8
  # These are the steps and jobs it does:
9
- # 1. **pair** person entries (note: the `destination-id` entry could not be present, it will add it in such a case).
9
+ # 1. **pair** person entries (note: the `destination-id` entry could not be present, it will add it
10
+ # in such a case).
10
11
  # 2. **retrieve** from server persons that were not included in `people`.
11
12
  # 3. **validation**
12
13
  # - a person should only receive account from just one user
@@ -24,7 +25,8 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
24
25
  # - **restore** email: sets the receiver email from the dummy address to the final email.
25
26
  # * the final email inbox will receive a **notification** of _email change_
26
27
  # @note
27
- # - the `csv` should contain a column `destination-id` containing the person `id` or `external_id` of the person that will be receiving the account.
28
+ # - the `csv` should contain a column `destination-id` containing the person `id` or `external_id` of
29
+ # the person that will be receiving the account.
28
30
  # - when running this case, it is recommended to use the option `-skip-batch-policies`
29
31
  # - it is highly recommended to either refresh the cache with `-get-people` or use the `-get-partial` option.
30
32
  # @param entries [Eco::API::Common::People::Entries] the input entries with the data.
@@ -34,28 +36,29 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
34
36
  # @option options [Hash<Symbol, Object>] :include things that should be included.
35
37
  # * `:email` (Boolean) [false] if the `email` should be transferred as well (**command option**: `-include-email`)
36
38
  # @option options [Hash<Symbol, Object>] :skip things that should be excluded.
37
- # * `:api_policies` (Boolean) [false] if the `api policies` should be skipped (**command option**: `-skip-api-policies`)
39
+ # * `:api_policies` (Boolean) [false] if the `api policies` should be skipped
40
+ # (**command option**: `-skip-api-policies`)
38
41
  # @return [Void]
39
- def main(entries, people, session, options, usecase)
42
+ def main(entries, _people, session, options, usecase) # rubocop:disable Metrics/AbcSize
40
43
  move = session.new_job("main", "move email accounts", :update, usecase, :account)
41
44
  free = session.new_job("main", "free up accounts", :update, usecase, :account)
42
45
  switch = session.new_job("main", "switch email", :update, usecase, :core)
43
46
  invite = session.new_job("post", "invite receivers", :update, usecase, :account)
44
47
  restore = session.new_job("post", "restore email", :update, usecase, :core)
45
48
 
46
- with_each_person_pair(entries, people, session, options) do |src_person, dst_person|
49
+ with_each_person_pair(entries) do |src_person, dst_person|
47
50
  # capture actual initial information
48
- src_doc = src_person.account.doc
49
- src_email = src_person.email
50
- src_dummy = dummy_email(src_person)
51
- dst_email = dst_person.email
52
- dst_dummy = dummy_email(dst_person)
53
- copy_src_email = options.dig(:include, :email) || !dst_person.account
54
- dst_end_email = copy_src_email ? src_email : dst_email
51
+ src_doc = src_person.account.doc
52
+ src_email = src_person.email
53
+ src_dummy = dummy_email(src_person)
54
+ dst_email = dst_person.email
55
+ dst_dummy = dummy_email(dst_person)
56
+ copy_src_email = options.dig(:include, :email) || !dst_person.account
57
+ dst_end_email = copy_src_email ? src_email : dst_email
55
58
 
56
59
  # account email renamings are necessary to avoid uncertainty and ensure no email taken error
57
- move.add(dst_person) {|dst| dst.email = dst_dummy}
58
- move.add(src_person) {|src| src.email = src_dummy}
60
+ move.add(dst_person) {|dst| dst.email = dst_dummy}
61
+ move.add(src_person) {|src| src.email = src_dummy}
59
62
  # free accounts up!
60
63
  free.add([dst_person, src_person]) {|person| person.account = nil}
61
64
  # to effectivelly transfer the user/account, email should be the same during invite
@@ -66,8 +69,10 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
66
69
  # recover the original email, if the receiver had account
67
70
  restore.add(dst_person) {|dst| dst.email = dst_end_email}
68
71
  end.tap do |units|
69
- if options[:simulate]
70
- units.each {|unit| puts unit.persons.map(&:external_id).join(" --> ")}
72
+ next unless options[:simulate]
73
+
74
+ units.each do |unit|
75
+ puts unit.persons.map(&:external_id).join(" --> ")
71
76
  end
72
77
  end
73
78
  end
@@ -77,23 +82,24 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
77
82
  # if the person has account and an email different to demo+__@ecoportal.co.nz
78
83
  # it transforms email to demo+__@ecoportal.co.nz
79
84
  def dummy_email(person)
80
- return nil unless email = person.email
85
+ return nil unless (email = person.email)
81
86
  return email if email.start_with?("demo") && email.end_with?("@ecoportal.co.nz")
82
87
  return email unless person.account
83
88
  "demo+#{email.split("@").join(".")}@ecoportal.co.nz"
84
89
  end
85
90
 
86
- def with_each_person_pair(entries, people, session, options)
87
- units = paired_entries(entries, session) do |unpaired_entries|
88
- report_missing_peer!(unpaired_entries, session.logger)
91
+ def with_each_person_pair(entries)
92
+ units = paired_entries(entries) do |unpaired_entries|
93
+ report_missing_peer!(unpaired_entries)
89
94
  end.map do |entry_pair|
90
- person_pair = to_persons(entry_pair, people, session, options)
95
+ person_pair = to_persons(entry_pair)
91
96
  new_unit(*entry_pair, *person_pair)
92
97
  end
93
- sort_units(units).tap do |units|
98
+
99
+ sort_units(units).tap do |uts|
94
100
  # check that there are no repeated sources or destinations, that sources have account
95
- validate_pairs!(units, session.logger)
96
- units.each do |unit|
101
+ validate_pairs!(uts)
102
+ uts.each do |unit|
97
103
  yield(*unit.persons) if block_given?
98
104
  end
99
105
  end
@@ -111,17 +117,20 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
111
117
  end
112
118
 
113
119
  # Entry helpers
114
- def to_persons(paired_entry, people, session, options)
115
- micro = session.micro
120
+ def to_persons(paired_entry)
116
121
  [].tap do |persons|
117
122
  micro.with_each(paired_entry, people, options) do |entry, person|
118
123
  next persons.push(person) unless person.new?
119
- if person = session.batch.search([entry], silent: true).people.first
124
+
125
+ person = session.batch.search([entry], silent: true).people.first
126
+ if person
120
127
  persons.push(person)
121
128
  people << person
122
129
  next
123
130
  end
124
- session.logger.error("This person does not exist: #{entry.to_s(:identify)}")
131
+ log(:error) {
132
+ "This person does not exist: #{entry.to_s(:identify)}"
133
+ }
125
134
  exit(1)
126
135
  end
127
136
  end.tap do |persons|
@@ -129,22 +138,23 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
129
138
  end
130
139
  end
131
140
 
132
- def paired_entries(entries, session)
133
- expect_destination_id!(entries, session.logger)
141
+ def paired_entries(entries)
142
+ expect_destination_id!(entries)
134
143
  missing_peer = []
135
144
  entries.each_with_object([]) do |source, out|
136
- if peer = entry_peer(source, entries)
145
+ if (peer = entry_peer(source, entries))
137
146
  out.push([source, peer])
138
147
  else
139
148
  missing_peer.push(source)
140
149
  end
141
- end.tap do |paired_entries|
150
+ end.tap do
142
151
  yield(missing_peer) if block_given?
143
152
  end
144
153
  end
145
154
 
146
155
  def entry_peer(entry, entries)
147
- return nil unless peer_id = entry_peer_id(entry)
156
+ return nil unless (peer_id = entry_peer_id(entry))
157
+
148
158
  entries.entry(id: peer_id, external_id: peer_id) || decouple_peer(entry)
149
159
  end
150
160
 
@@ -159,7 +169,7 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
159
169
 
160
170
  def entry_peer_id(entry)
161
171
  dest_id = entry.final_entry["destination-id"]
162
- return dest_id unless dest_id.to_s.strip.empty?
172
+ dest_id unless dest_id.to_s.strip.empty?
163
173
  end
164
174
 
165
175
  def entry_peer_id?(entry)
@@ -172,9 +182,11 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
172
182
  def persons
173
183
  [src_person, dst_person]
174
184
  end
175
- def reversed_unit?(u2)
176
- (src_person == u2.dst_person) && (dst_person == u2.src_person)
185
+
186
+ def reversed_unit?(u_2)
187
+ (src_person == u_2.dst_person) && (dst_person == u_2.src_person)
177
188
  end
189
+
178
190
  # givers go first
179
191
  def <=>(other)
180
192
  return -1 if src_person == other.dst_person
@@ -184,15 +196,15 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
184
196
  end
185
197
  end
186
198
 
187
- def new_unit(e1, e2, p1, p2)
188
- unit_type.new(e1, e2, p1, p2)
199
+ def new_unit(e_1, e_2, p_1, p_2)
200
+ unit_type.new(e_1, e_2, p_1, p_2)
189
201
  end
190
202
 
191
203
  # Units helpers
192
204
  def find_repeated(units, &block)
193
- units.group_by(&block).select do |k,v|
205
+ units.group_by(&block).select do |_k, v|
194
206
  v.count > 1
195
- end.map {|k, v| v.first}
207
+ end.map {|_k, v| v.first}
196
208
  end
197
209
 
198
210
  def uniq_array(ary, &block)
@@ -201,8 +213,9 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
201
213
  end
202
214
  end
203
215
 
204
- def validate_pairs!(units, logger)
216
+ def validate_pairs!(units) # rubocop:disable Metrics/AbcSize
205
217
  missing_account = []
218
+
206
219
  src_repeated = find_repeated(units) do |unit|
207
220
  unit.src_person.tap do |src_person|
208
221
  missing_account << (src_person.account ? nil : str_person_entry(unit.src_person, unit.src_entry))
@@ -210,32 +223,32 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
210
223
  end.each_with_object([]) do |unit, lines|
211
224
  lines << str_person_entry(unit.src_person, unit.src_entry)
212
225
  end
213
- dst_repeated = find_repeated(units) do
214
- |unit| unit.dst_person
215
- end.each_with_object([]) do |unit, lines|
226
+
227
+ dst_repeated = find_repeated(units, &:dst_person).each_with_object([]) do |unit, lines|
216
228
  lines << str_person_entry(unit.dst_person, unit.dst_entry, unit.src_entry.idx)
217
229
  end
218
230
  missing_account.compact!
219
- unless [missing_account, src_repeated, dst_repeated].all?(&:empty?)
220
- report_missing_account(missing_account.join("\n"), logger) unless missing_account.empty?
221
231
 
222
- msg = Proc.new do |spot|
223
- "Transfers should be a 1.to.1 relation. The following #{spot} entries are repeated in the csv:"
224
- end
225
- report_repeated(src_repeated.join("\n"), logger, msg["SOURCE"]) unless src_repeated.empty?
226
- report_repeated(dst_repeated.join("\n"), logger, msg["DESTINATION"]) unless dst_repeated.empty?
227
- exit(1)
232
+ return if [missing_account, src_repeated, dst_repeated].all?(&:empty?)
233
+
234
+ report_missing_account(missing_account.join("\n")) unless missing_account.empty?
235
+
236
+ msg = proc do |spot|
237
+ "Transfers should be a 1.to.1 relation. The following #{spot} entries are repeated in the csv:"
228
238
  end
239
+ report_repeated(src_repeated.join("\n"), msg["SOURCE"]) unless src_repeated.empty?
240
+ report_repeated(dst_repeated.join("\n"), msg["DESTINATION"]) unless dst_repeated.empty?
241
+ exit(1)
229
242
  end
230
243
 
231
244
  # Messaging & Validation
232
- def report_missing_peer!(unpaired_entries, logger)
233
- unless unpaired_entries.empty?
234
- msg = "The following rows are missing 'destination-id':\n\n"
235
- msg += unpaired_entries.map {|entry| str_missing_peer(entry)}.join("\n")
236
- logger.error(msg)
237
- exit(1)
238
- end
245
+ def report_missing_peer!(unpaired_entries)
246
+ return if unpaired_entries.empty?
247
+
248
+ msg = "The following rows are missing 'destination-id':\n\n"
249
+ msg += unpaired_entries.map {|entry| str_missing_peer(entry)}.join("\n")
250
+ log(:error) { msg }
251
+ exit(1)
239
252
  end
240
253
 
241
254
  def str_missing_peer(entry)
@@ -247,22 +260,25 @@ class Eco::API::UseCases::Default::People::TransferAccountCase < Eco::API::Commo
247
260
  "#{str_row}id: '#{person.id || person.external_id}' email:#{person.email} -> Entry #{entry.to_s(:identify)}"
248
261
  end
249
262
 
250
- def expect_destination_id!(entries, logger)
251
- unless entries.length > 0
252
- logger.error("Your csv is empty")
253
- exit(1)
254
- end
255
- unless entry_peer_id?(entries.first)
256
- logger.error("You haven't defined a column 'destination-id' to whom the account should be transferred")
263
+ def expect_destination_id!(entries)
264
+ unless entries.any?
265
+ log(:error) { "Your csv is empty" }
257
266
  exit(1)
258
267
  end
268
+
269
+ return if entry_peer_id?(entries.first)
270
+
271
+ log(:error) {
272
+ "You haven't defined a column 'destination-id' to whom the account should be transferred"
273
+ }
274
+ exit(1)
259
275
  end
260
276
 
261
- def report_missing_account(str, logger)
262
- logger.error("The following source people do not have account:\n#{str}")
277
+ def report_missing_account(str)
278
+ log(:error) { "The following source people do not have account:\n#{str}" }
263
279
  end
264
280
 
265
- def report_repeated(str, logger, msg = "The following entries are repeated")
266
- logger.error("#{msg}\n#{str}")
281
+ def report_repeated(str, msg = "The following entries are repeated")
282
+ log(:error) { "#{msg}\n#{str}" }
267
283
  end
268
284
  end
@@ -52,7 +52,7 @@ class Eco::API::UseCases::DefaultCases::HrisCase < Eco::API::Common::Loaders::Us
52
52
  msg << " (as it will remove the account of all the people of other schemas"
53
53
  msg << " if they are not in the input file)."
54
54
  msg << "\n For example: -schema-id '#{active_schema.name.downcase}'"
55
- logger.error(msg)
55
+ log(:error) { msg }
56
56
  raise msg
57
57
  end
58
58
  end
@@ -4,12 +4,12 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
4
4
 
5
5
  attr_reader :people
6
6
 
7
- def main(people, session, options, usecase)
7
+ def main(people, _session, options, _usecase)
8
8
  options[:end_get] = false
9
9
  @people = people
10
10
 
11
11
  unless people && !people.empty?
12
- logger.warn("No source people to create the file... aborting!")
12
+ log(:warn) { "No source people to create the file... aborting!" }
13
13
  return false
14
14
  end
15
15
 
@@ -40,7 +40,7 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
40
40
  def to_row(person)
41
41
  entry = to_entry_type(person)
42
42
  entry.values_at(*keys(entry)).tap do |row|
43
- row << schemas.to_name(person.details&.schema_id) || "No Schema"
43
+ row << (schemas.to_name(person.details&.schema_id) || "No Schema")
44
44
  end
45
45
  end
46
46
 
@@ -53,11 +53,11 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
53
53
  end
54
54
 
55
55
  def keys(entry)
56
- entry.keys - ["freemium", "send_invites"]
56
+ entry.keys - %w[freemium send_invites]
57
57
  end
58
58
 
59
59
  def nice_header_names?
60
- options.dig(:nice_header) || options.dig(:export, :options, :nice_header)
60
+ options[:nice_header] || options.dig(:export, :options, :nice_header)
61
61
  end
62
62
 
63
63
  def nice_header_names(header, schema: nil)
@@ -65,7 +65,7 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
65
65
  name_maps = schema.fields_by_alt_id.each_with_object({}) do |(alt_id, fld), mappings|
66
66
  mappings[alt_id] = fld.name
67
67
  end.merge(nice_header_maps)
68
- header.map {|name| name_maps[name] ? name_maps[name] : name}
68
+ header.map {|name| name_maps[name] || name}
69
69
  end
70
70
 
71
71
  def to_entry_type(person)
@@ -89,7 +89,7 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
89
89
 
90
90
  def by_schema
91
91
  people.group_by do |person|
92
- if details = person.details
92
+ if (details = person.details)
93
93
  details.schema_id
94
94
  end
95
95
  end.transform_values do |persons|
@@ -43,7 +43,7 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
43
43
  with_sliced_input(batch_input, size: size) do |sliced_input, page, pages, count, total|
44
44
  msg = "#{dry_run_msg}Launching '#{desc}' request #{page} (of #{pages}) "
45
45
  msg << "with #{count} commands (done #{done} of #{total})..."
46
- logger.info { msg }
46
+ log(:info) { msg }
47
47
 
48
48
  response = nil
49
49
  unless simulate? && !options.dig(:requests, :backup)
@@ -2,87 +2,95 @@ class Eco::API::UseCases::GraphQL::Samples::Location
2
2
  module Command::Service
3
3
  # Service to generate the command updates.
4
4
  module TreeUpdate
5
- include Eco::API::UseCases::GraphQL::Samples::Location::Service::TreeDiff
6
- include Eco::API::UseCases::GraphQL::Samples::Location::Command::DSL
7
- include Eco::API::UseCases::GraphQL::Utils::Sftp
8
-
9
5
  # Whether to stop or continue on command fail
10
6
  FORCE_CONTINUE = false
11
7
 
12
- def process
13
- super
14
- ensure
15
- rescued { re_archive }
16
- rescued { email_digest('TagTree Update') }
8
+ class << self
9
+ def included(base)
10
+ super(base)
11
+ base.send :include, Eco::API::UseCases::GraphQL::Samples::Location::Service::TreeDiff
12
+ base.send :include, Eco::API::UseCases::GraphQL::Samples::Location::Command::DSL
13
+ base.send :include, Eco::API::UseCases::GraphQL::Utils::Sftp
14
+ base.send :include, InstanceMethods
15
+ end
17
16
  end
18
17
 
19
- # Before closing, run RE-ARCHIVE: those that where unarchived via archivedToken
20
- # that should remain archived.
21
- # @note this is an additional necessary step
22
- def re_archive
23
- return if simulate?
24
- stage = :rearchive
18
+ module InstanceMethods
19
+ def process
20
+ super
21
+ ensure
22
+ rescued { re_archive }
23
+ rescued { email_digest('TagTree Update') }
24
+ end
25
+
26
+ # Before closing, run RE-ARCHIVE: those that where unarchived via archivedToken
27
+ # that should remain archived.
28
+ # @note this is an additional necessary step
29
+ def re_archive
30
+ return if simulate?
31
+ stage = :rearchive
25
32
 
26
- nodes_diff_class.new(
27
- hash_list(current_tree),
28
- file_nodes_list,
29
- original_tree: current_tree,
30
- logger: logger
31
- ).tap do |nodes_diff|
32
- archive_input = input(nodes_diff.stage_commands(:archive), force_continue: true)
33
- sliced_batches(
34
- archive_input,
35
- desc: stage,
36
- track_tree_mode: :once
37
- ) do |sliced_input, response, page, pages, count, total| # rubocop:disable Metrics/ParameterLists
38
- page_results = request_results_class.new(sliced_input, response)
39
- (results[stage] ||= []) << page_results
40
- self.error ||= page_errors?(page_results, page, pages, count, total, stage: stage)
33
+ nodes_diff_class.new(
34
+ hash_list(current_tree),
35
+ file_nodes_list,
36
+ original_tree: current_tree,
37
+ logger: logger
38
+ ).tap do |nodes_diff|
39
+ archive_input = input(nodes_diff.stage_commands(:archive), force_continue: true)
40
+ sliced_batches(
41
+ archive_input,
42
+ desc: stage,
43
+ track_tree_mode: :once
44
+ ) do |sliced_input, response, page, pages, count, total| # rubocop:disable Metrics/ParameterLists
45
+ page_results = request_results_class.new(sliced_input, response)
46
+ (results[stage] ||= []) << page_results
47
+ self.error ||= page_errors?(page_results, page, pages, count, total, stage: stage)
48
+ end
41
49
  end
42
50
  end
43
- end
44
51
 
45
- private
52
+ private
46
53
 
47
- # Work with adapted diff builders.
48
- def nodes_diff_class
49
- Eco::API::UseCases::GraphQL::Helpers::Location::Command::Diffs
50
- end
54
+ # Work with adapted diff builders.
55
+ def nodes_diff_class
56
+ Eco::API::UseCases::GraphQL::Helpers::Location::Command::Diffs
57
+ end
51
58
 
52
- def inputs(nodes_diff = comparer, force_continue: force_continue?)
53
- {}.tap do |sequence|
54
- nodes_diff.commands do |comms, stage|
55
- sequence[stage] = input(comms, force_continue: force_continue)
56
- end
57
- end.tap do |sequence|
58
- sequence.each do |stage, input|
59
- yield(input, stage) if block_given?
59
+ def inputs(nodes_diff = comparer, force_continue: force_continue?)
60
+ {}.tap do |sequence|
61
+ nodes_diff.commands do |comms, stage|
62
+ sequence[stage] = input(comms, force_continue: force_continue)
63
+ end
64
+ end.tap do |sequence|
65
+ sequence.each do |stage, input|
66
+ yield(input, stage) if block_given?
67
+ end
60
68
  end
61
69
  end
62
- end
63
70
 
64
- # Generates the file and pushes to the SFTP folder
65
- # @note this method can only work if we can run cummulative dry-runs to the back-end.
66
- # This is only possible using a draft, which is not that desired.
67
- # @note the SFTP push only happens if `remote_subfolder` is defined, via:
68
- # 1. `options.dig(:sftp, :remote_subfolder)`
69
- # 2. `REMOTE_FOLDER` const
70
- def close_handling_tags_remap_csv
71
- return false unless super
72
- upload(tags_remap_csv_file) unless remote_subfolder.nil?
73
- true
74
- end
71
+ # Generates the file and pushes to the SFTP folder
72
+ # @note this method can only work if we can run cummulative dry-runs to the back-end.
73
+ # This is only possible using a draft, which is not that desired.
74
+ # @note the SFTP push only happens if `remote_subfolder` is defined, via:
75
+ # 1. `options.dig(:sftp, :remote_subfolder)`
76
+ # 2. `REMOTE_FOLDER` const
77
+ def close_handling_tags_remap_csv
78
+ return false unless super
79
+ upload(tags_remap_csv_file) unless remote_subfolder.nil?
80
+ true
81
+ end
75
82
 
76
- def email_digest(title)
77
- return if simulate?
78
- digest_msgs = logger.cache.logs(level: %i[info error warn])
79
- exception = exception ? " - Exception!" : ''
80
- subject = "#{config.active_enviro} - #{title}#{exception}"
81
- session.mail(subject: subject, body: digest_msgs.join)
82
- end
83
+ def email_digest(title)
84
+ return if simulate?
85
+ digest_msgs = logger.cache.logs(level: %i[info error warn])
86
+ exception = exception ? " - Exception!" : ''
87
+ subject = "#{config.active_enviro} - #{title}#{exception}"
88
+ session.mail(subject: subject, body: digest_msgs.join)
89
+ end
83
90
 
84
- def print_diff_details?
85
- false
91
+ def print_diff_details?
92
+ false
93
+ end
86
94
  end
87
95
  end
88
96
  end
@@ -43,7 +43,13 @@ module Eco::API::UseCases::GraphQL::Samples
43
43
  include Eco::API::UseCases::GraphQL::Samples::Location::Service::TreeToList
44
44
 
45
45
  require_relative 'tree_diff/convertible'
46
- include Convertible
46
+
47
+ class << self
48
+ def included(base)
49
+ super(base)
50
+ base.send :include, Convertible
51
+ end
52
+ end
47
53
 
48
54
  def process
49
55
  compare
@@ -19,6 +19,7 @@ module Eco::API::UseCases::GraphQL::Samples::Location::Service
19
19
 
20
20
  def generate_live_nodes_file(nodes_list)
21
21
  return unless generate_live_nodes_file?
22
+
22
23
  CSV.open(output_filename, "w") do |csv|
23
24
  csv << output_header
24
25
  nodes_list do |item|