eco-helpers 3.0.4 → 3.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/CHANGELOG.md +55 -4
  4. data/eco-helpers.gemspec +1 -1
  5. data/lib/eco/api/common/class_helpers.rb +24 -23
  6. data/lib/eco/api/common/class_meta_basics.rb +0 -2
  7. data/lib/eco/api/common/loaders/use_case.rb +1 -0
  8. data/lib/eco/api/common/people/entry_factory.rb +6 -4
  9. data/lib/eco/api/common/people/person_entry.rb +4 -6
  10. data/lib/eco/api/common/people/person_entry_attribute_mapper.rb +25 -12
  11. data/lib/eco/api/common/people/person_parser.rb +8 -0
  12. data/lib/eco/api/common/session/base_session.rb +1 -1
  13. data/lib/eco/api/common/session/environment.rb +7 -0
  14. data/lib/eco/api/common/session/file_manager.rb +15 -8
  15. data/lib/eco/api/common/session/logger/cache.rb +14 -10
  16. data/lib/eco/api/common/session/logger/log.rb +8 -7
  17. data/lib/eco/api/common/session/mailer.rb +22 -13
  18. data/lib/eco/api/common/session/s3_uploader.rb +29 -20
  19. data/lib/eco/api/microcases/people_search.rb +1 -1
  20. data/lib/eco/api/organization/login_providers.rb +11 -4
  21. data/lib/eco/api/organization/node_classifications.rb +3 -0
  22. data/lib/eco/api/organization/presets_factory.rb +37 -31
  23. data/lib/eco/api/organization/tag_tree.rb +14 -5
  24. data/lib/eco/api/policies/default_policies/99_user_access_policy.rb +28 -18
  25. data/lib/eco/api/session/batch/errors.rb +38 -20
  26. data/lib/eco/api/session/batch/job.rb +252 -135
  27. data/lib/eco/api/session/batch/status.rb +55 -36
  28. data/lib/eco/api/session/batch.rb +2 -2
  29. data/lib/eco/api/session/config/base_config.rb +12 -11
  30. data/lib/eco/api/session/config/tagtree.rb +10 -14
  31. data/lib/eco/api/session/config/workflow.rb +15 -3
  32. data/lib/eco/api/session/config.rb +19 -26
  33. data/lib/eco/api/session.rb +13 -4
  34. data/lib/eco/api/usecases/cli.rb +4 -0
  35. data/lib/eco/api/usecases/default/locations/cli/codes_to_tags_cli.rb +18 -0
  36. data/lib/eco/api/usecases/default/locations/cli/csv_to_tree_cli.rb +12 -0
  37. data/lib/eco/api/usecases/default/locations/cli/tagtree_paths_cli.rb +12 -0
  38. data/lib/eco/api/usecases/default/locations/codes_to_tags_case.rb +32 -13
  39. data/lib/eco/api/usecases/default/locations/csv_to_tree_case.rb +15 -5
  40. data/lib/eco/api/usecases/default/locations/tagtree_extract_case.rb +6 -0
  41. data/lib/eco/api/usecases/default/locations/tagtree_paths_case.rb +51 -0
  42. data/lib/eco/api/usecases/default/locations.rb +1 -1
  43. data/lib/eco/api/usecases/default/people/amend/cli/reinvite_sync_cli.rb +8 -0
  44. data/lib/eco/api/usecases/default/people/amend/cli/reinvite_trans_cli.rb +11 -0
  45. data/lib/eco/api/usecases/default/people/amend/cli/restore_db_cli.rb +26 -0
  46. data/lib/eco/api/usecases/default/people/amend/reinvite_sync_case.rb +2 -0
  47. data/lib/eco/api/usecases/default/people/amend/reinvite_trans_case.rb +2 -0
  48. data/lib/eco/api/usecases/default/people/amend/restore_db_case.rb +3 -0
  49. data/lib/eco/api/usecases/default/people/treat/analyse_people_case.rb +15 -5
  50. data/lib/eco/api/usecases/default/people/treat/cli/analyse_people_cli.rb +66 -0
  51. data/lib/eco/api/usecases/default/people/treat/cli/org_data_convert_cli.rb +35 -0
  52. data/lib/eco/api/usecases/default/people/treat/cli/supers_cyclic_identify_cli.rb +15 -0
  53. data/lib/eco/api/usecases/default/people/treat/cli/supers_hierachy_cli.rb +15 -0
  54. data/lib/eco/api/usecases/default/people/treat/org_data_convert_case.rb +11 -5
  55. data/lib/eco/api/usecases/default/people/treat/supers_cyclic_identify_case.rb +28 -7
  56. data/lib/eco/api/usecases/default/people/treat/supers_hierarchy_case.rb +32 -9
  57. data/lib/eco/api/usecases/default/people/utils/set_default_tag_case.rb +2 -1
  58. data/lib/eco/api/usecases/default_cases/to_csv_case.rb +2 -2
  59. data/lib/eco/api/usecases/graphql/helpers/base/case_env.rb +1 -0
  60. data/lib/eco/api/usecases/graphql/helpers/base/error_handling.rb +52 -0
  61. data/lib/eco/api/usecases/graphql/helpers/base.rb +1 -0
  62. data/lib/eco/api/usecases/graphql/helpers/location/base/classifications_parser.rb +5 -0
  63. data/lib/eco/api/usecases/graphql/helpers/location/command/diffs/stages/commandable.rb +2 -0
  64. data/lib/eco/api/usecases/graphql/helpers/location/command/diffs/stages/diff_sortable.rb +2 -0
  65. data/lib/eco/api/usecases/graphql/helpers/location/command/result.rb +2 -1
  66. data/lib/eco/api/usecases/graphql/helpers/location/command/results.rb +3 -0
  67. data/lib/eco/api/usecases/graphql/helpers/location/command.rb +1 -0
  68. data/lib/eco/api/usecases/graphql/helpers/location/tags_remap.rb +3 -0
  69. data/lib/eco/api/usecases/graphql/samples/location/command/dsl.rb +19 -18
  70. data/lib/eco/api/usecases/graphql/samples/location/command/results.rb +1 -7
  71. data/lib/eco/api/usecases/graphql/samples/location/command/service/tree_update.rb +11 -6
  72. data/lib/eco/api/usecases/graphql/samples/location/command/track_changed_ids.rb +3 -8
  73. data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff/convertible/parsing/classifications.rb +2 -0
  74. data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff/convertible.rb +5 -2
  75. data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff.rb +10 -4
  76. data/lib/eco/api/usecases/graphql/samples/location/service/tree_to_list/converter/parser.rb +6 -2
  77. data/lib/eco/api/usecases/graphql/samples/location/service/tree_to_list/converter.rb +2 -0
  78. data/lib/eco/api/usecases/graphql/samples/location/service/tree_to_list.rb +5 -3
  79. data/lib/eco/api/usecases/ooze_cases/export_register_case.rb +1 -0
  80. data/lib/eco/api/usecases/ooze_samples/helpers_migration/copying.rb +66 -29
  81. data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +25 -3
  82. data/lib/eco/api/usecases/ooze_samples/register_update_case.rb +10 -0
  83. data/lib/eco/api/usecases/use_case.rb +3 -1
  84. data/lib/eco/cli/config/use_cases.rb +4 -0
  85. data/lib/eco/cli/scripting/args_helpers.rb +3 -2
  86. data/lib/eco/cli/scripting/argument.rb +2 -2
  87. data/lib/eco/cli_default/input.rb +49 -45
  88. data/lib/eco/cli_default/input_filters.rb +32 -17
  89. data/lib/eco/cli_default/options.rb +8 -4
  90. data/lib/eco/cli_default/people.rb +1 -1
  91. data/lib/eco/cli_default/people_filters.rb +32 -24
  92. data/lib/eco/cli_default/usecases.rb +8 -121
  93. data/lib/eco/cli_default/workflow.rb +6 -4
  94. data/lib/eco/csv/split.rb +2 -0
  95. data/lib/eco/csv/table.rb +13 -0
  96. data/lib/eco/data/files/encoding.rb +15 -8
  97. data/lib/eco/data/files/helpers.rb +6 -2
  98. data/lib/eco/data/hashes/diff_result.rb +5 -0
  99. data/lib/eco/data/locations/node_diff/nodes_diff.rb +13 -0
  100. data/lib/eco/data/locations/node_diff.rb +4 -0
  101. data/lib/eco/data/locations/node_level.rb +6 -0
  102. data/lib/eco/language/auxiliar_logger.rb +2 -0
  103. data/lib/eco/version.rb +1 -1
  104. data/lib/eco-helpers.rb +1 -1
  105. metadata +16 -6
  106. data/lib/eco/api/usecases/default/locations/create_tag_paths_case.rb +0 -25
  107. data/lib/eco/api/usecases/default/people/amend/reinvite_trans_cli.rb +0 -4
@@ -14,6 +14,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
14
14
  def main(_session, options, _usecase)
15
15
  options[:end_get] = false
16
16
  raise "You need to inherit from this class ('#{self.class}') and call super with a block" unless block_given?
17
+
17
18
  @target = nil
18
19
  yield
19
20
  end
@@ -22,6 +23,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
22
23
  def process_ooze(ooz = target)
23
24
  ooz ||= ooze
24
25
  raise "You need to inherit from this class ('#{self.class}') and call super with a block" unless block_given?
26
+
25
27
  yield(ooz)
26
28
  update_ooze(ooz)
27
29
  end
@@ -33,15 +35,18 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
33
35
  end
34
36
 
35
37
  def create_page(page = nil, template_id: nil, retrieve: false)
36
- template_id = template_id.id if template_id.is_a?(Ecoportal::API::V2::Page)
37
- template_id ||= page.template_id if page.respond_to?(:template_id)
38
+ template_id = template_id.id if template_id.is_a?(Ecoportal::API::V2::Page)
39
+ template_id ||= page.template_id if page.respond_to?(:template_id)
38
40
  template_id ||= page["template_id"] if page.is_a?(Hash)
39
- page = new_page(template_id) unless page || !template_id
41
+ page = new_page(template_id) unless page || !template_id
42
+
40
43
  yield(page) if block_given?
44
+
41
45
  reference = apiv2.pages.create(page, from: template_id)
42
46
  ooze_id = reference.page_id
43
47
  stage_id = reference.active_stage_id
44
48
  return [ooze_id, stage_id] unless retrieve
49
+
45
50
  ooze(ooze_id, stage_id: stage_id)
46
51
  end
47
52
 
@@ -49,6 +54,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
49
54
  unless section.is_a?(Ecoportal::API::V2::Page::Section)
50
55
  raise "You need to specify a section for a new field. Given: #{section.class}"
51
56
  end
57
+
52
58
  entry.components.add(doc: doc) do |field|
53
59
  section.add_component(field, after: after, before: before, side: side)
54
60
  end.tap do |field|
@@ -60,6 +66,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
60
66
  unless section.is_a?(Ecoportal::API::V2::Page::Section)
61
67
  raise "You need to specify a section for a new field. Given: #{section.class}"
62
68
  end
69
+
63
70
  entry.components.add(label: name, type: type) do |field|
64
71
  section.add_component(field, after: after, before: before, side: side)
65
72
  end.tap do |field|
@@ -69,6 +76,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
69
76
 
70
77
  def with_fields(entry = target, type: nil, label: nil)
71
78
  flds = entry.components
79
+
72
80
  if type
73
81
  if flds.respond_to?(:get_by_type)
74
82
  flds = flds.get_by_type(type)
@@ -76,6 +84,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
76
84
  flds = flds.select {|fld| fld.type == type}
77
85
  end
78
86
  end
87
+
79
88
  flds.select do |fld|
80
89
  value = label == :unnamed ? nil : label
81
90
  !label || same_string?(fld.label, value)
@@ -87,6 +96,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
87
96
  def with_sections(entry = target, type: nil, heading: nil)
88
97
  secs = entry.sections
89
98
  secs = secs.get_by_type(type) if type
99
+
90
100
  secs.select do |sec|
91
101
  value = heading == :unnamed ? nil : heading
92
102
  !heading || same_string?(sec.heading, value)
@@ -97,6 +107,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
97
107
 
98
108
  def with_stage(name:)
99
109
  return unless (stage = target.stages.get_by_name(name))
110
+
100
111
  yield(stage) if block_given?
101
112
  stage
102
113
  end
@@ -110,7 +121,9 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
110
121
 
111
122
  def ooze(ooze_id = nil, stage_id: nil)
112
123
  return target unless ooze_id
124
+
113
125
  before_loading_new_target(ooze_id)
126
+
114
127
  apiv2.pages.get(ooze_id, stage_id: stage_id).tap do |ooze|
115
128
  if ooze
116
129
  new_target(ooze)
@@ -130,7 +143,9 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
130
143
 
131
144
  if (stg = ooze.stages[id_name] || ooze.stages.get_by_name(id_name))
132
145
  return ooze if ooze.respond_to?(:current_stage_id) && (ooze.current_stage_id == stg.id)
146
+
133
147
  before_loading_new_target(ooze_id)
148
+
134
149
  return apiv2.pages.get(ooze_id, stage_id: stg.id).tap do |stage|
135
150
  if stage
136
151
  new_target(stage)
@@ -142,6 +157,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
142
157
  end
143
158
  end
144
159
  end
160
+
145
161
  exit_error "Stage '#{id_name}' doesn't exist in ooze '#{ooze_id}'"
146
162
  end
147
163
 
@@ -178,8 +194,10 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
178
194
  msg += " after doing unsaved changes to #{object_reference(target)}"
179
195
  log(:warn) { msg }
180
196
  end
197
+
181
198
  yield(target) if block_given?
182
199
  end
200
+
183
201
  @target = object
184
202
  end
185
203
 
@@ -206,6 +224,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
206
224
  def display_patch(entry = target)
207
225
  return if options.dig(:feedback, :only_stats)
208
226
  return unless (patch = (patch_doc(entry) || {})["page"])
227
+
209
228
  pp patch
210
229
  end
211
230
 
@@ -222,12 +241,15 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
222
241
  entry.validate.tap do |validation|
223
242
  log(:error) { validation } if validation.is_a?(String)
224
243
  end
244
+
225
245
  display_patch(entry)
226
246
  backup_patch!(entry)
247
+
227
248
  if dirty?(entry) && dry_count > self.class::DRY_COUNT
228
249
  log(:info) { "Reached #{self.class::DRY_COUNT} dry-run samples." }
229
250
  exit(0)
230
251
  end
252
+
231
253
  false
232
254
  end
233
255
 
@@ -49,6 +49,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
49
49
 
50
50
  def before_loading_new_target(ooze_id)
51
51
  return unless (pending = queue_shift(ooze_id))
52
+
52
53
  update_ooze(pending).tap do |result|
53
54
  if result.is_a?(Ecoportal::API::Common::Response)
54
55
  if result.success?
@@ -83,6 +84,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
83
84
  log(:warn) { msg }
84
85
  update_ooze(pending)
85
86
  end
87
+
86
88
  if (ooz = ooze(page_result.id))
87
89
  @retrieved_oozes += 1
88
90
  yield(ooz)
@@ -97,9 +99,11 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
97
99
 
98
100
  def enqueue(object)
99
101
  return unless object.respond_to?(:id)
102
+
100
103
  unless object.is_a?(Ecoportal::API::V2::Page) or object.is_a?(Ecoportal::API::V2::Pages::PageStage)
101
104
  raise "Queuing is just for entries. Expecting Page or PageStage. Given: #{object.class}"
102
105
  end
106
+
103
107
  if (elem = queue_get(object.id))
104
108
  msg = "Something is wrong. Native case 'RegisterUpdateCase' is "
105
109
  if (elem != object) && dirty?(elem)
@@ -131,7 +135,9 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
131
135
 
132
136
  def batched_search_results
133
137
  raise "Missing block. It yields in slices of #{self.class.batch_size} results" unless block_given?
138
+
134
139
  results_preview
140
+
135
141
  results = []
136
142
  apiv2.registers.search(register_id, search_options) do |page_result|
137
143
  results << page_result
@@ -140,6 +146,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
140
146
  results = []
141
147
  end
142
148
  end
149
+
143
150
  yield(results) unless results.empty?
144
151
  end
145
152
 
@@ -180,6 +187,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
180
187
 
181
188
  def backup_patch!(ooze = target)
182
189
  return if (patch_doc(ooze) || {})["page"]
190
+
183
191
  log(:info) {
184
192
  "No changes to update for #{object_reference(ooze)}."
185
193
  }
@@ -188,8 +196,10 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
188
196
  def results_preview
189
197
  apiv2.registers.search(register_id, search_options.merge(only_first: true)).tap do |search_results|
190
198
  @total_search_oozes = search_results.total
199
+
191
200
  str_results = "Total target entries: #{search_results.total} (out of #{search_results.total_before_filtering})"
192
201
  default_answer = session.config.run_mode_remote?? "Y" : "N"
202
+
193
203
  session.prompt_user(
194
204
  "Do you want to proceed (y/N):",
195
205
  explanation: str_results,
@@ -58,7 +58,9 @@ module Eco
58
58
 
59
59
  UseCaseIO.new(**kargs).tap do |uio|
60
60
  @options = uio.options
61
- uio.session.logger.debug("#{self.class}: going to process '#{name}'")
61
+ uio.session.log(:debug) {
62
+ "#{self.class}: going to process '#{name}'"
63
+ }
62
64
 
63
65
  set_session_n_options(uio) if callback_from_loader?
64
66
 
@@ -28,13 +28,16 @@ module Eco
28
28
  # @return [String] summary of the use cases.
29
29
  def help(refine: nil)
30
30
  refinement = refine.is_a?(String)? " (containing: '#{refine}')" : ""
31
+
31
32
  ["The following are the available use cases#{refinement}:"].then do |lines|
32
33
  max_len = keys_max_len(@linked_cases.keys)
34
+
33
35
  @linked_cases.keys.sort.select do |key|
34
36
  !refine.is_a?(String) || key.include?(refine)
35
37
  end.each do |option_case|
36
38
  lines << help_line(option_case, @linked_cases[option_case].description, max_len)
37
39
  end
40
+
38
41
  lines
39
42
  end.join("\n")
40
43
  end
@@ -150,6 +153,7 @@ module Eco
150
153
 
151
154
  def validate_io!(io)
152
155
  return if io.is_a?(Eco::API::UseCases::BaseIO)
156
+
153
157
  raise ArgumentError, "You need to provide Eco::API::UseCases::BaseIO object. Given: #{io.class}"
154
158
  end
155
159
  end
@@ -30,7 +30,8 @@ module Eco
30
30
  all_available: all_available
31
31
  }
32
32
  unknown = arguments.unknown(**args) do |key, correct|
33
- suggestions[key] = correct unless correct.empty?
33
+ next suggestions[key] = correct unless correct.empty?
34
+ suggstions[key] = '-- not known similar options! --'
34
35
  end
35
36
  unknown = unknown.select {|arg| is_modifier?(arg)} if only_options
36
37
 
@@ -38,7 +39,7 @@ module Eco
38
39
 
39
40
  suggestions_str = suggestions.slice(*unknown).map do |key, correct|
40
41
  str = "Unknown option '#{key}'."
41
- str_corr = correct.map {|key| "'#{key}'"}
42
+ str_corr = correct.map {|ky| "'#{ky}'"}
42
43
  str << " Did you mean: #{str_corr.join(', ')}" unless correct.empty?
43
44
  str
44
45
  end.join("\n * ")
@@ -2,12 +2,11 @@ module Eco
2
2
  class CLI
3
3
  class Scripting
4
4
  class Argument
5
-
6
5
  attr_reader :key
7
6
 
8
7
  class << self
9
8
  def is_modifier?(value)
10
- value&.start_with?("-")
9
+ value&.start_with?("-")
11
10
  end
12
11
  end
13
12
 
@@ -19,6 +18,7 @@ module Eco
19
18
  def args_slice(*args)
20
19
  #pp "known arg '#{key}' => included? #{args.include?(key)}"
21
20
  return args unless args.include?(key)
21
+
22
22
  i = args.index(key)
23
23
  j = with_param?? i+1 : i
24
24
  args - args.slice(i..j)
@@ -21,61 +21,65 @@ ASSETS.cli.config do |cnf|
21
21
 
22
22
  cnf.input(default_option: "-entries-from") do |session, str_opt, options|
23
23
  input = []
24
- if SCR.get_arg(str_opt)
25
- file = SCR.get_file(str_opt, required: true)
26
24
 
27
- # Command line check
28
- format = formats.reduce(nil) do |matched, (frm, selectors)|
29
- used = selectors[:option].reduce(false) {|us, option| SCR.get_arg(option) || us}
30
- next matched if matched
31
- next frm if used
32
- end
25
+ next input unless SCR.get_arg(str_opt)
26
+
27
+ file = SCR.get_file(str_opt, required: true)
33
28
 
34
- # File/Folder check
35
- file = File.expand_path(file)
36
- if File.directory?(file)
37
- folder = file
38
- file = Dir.glob("#{file}/*").reject {|f| File.directory?(f)}
39
- ext = (format && formats[format][:extname]) || [File.extname(file.first)]
40
- file = file.select {|f| ext.any? {|e| File.extname(f) == e}}.tap do |files|
41
- if files.empty?
42
- session.logger.error("Could not find any file with extension: #{ext} in folder '#{folder}'")
43
- exit(1)
44
- end
29
+ # Command line check
30
+ format = formats.reduce(nil) do |matched, (frm, selectors)|
31
+ used = selectors[:option].reduce(false) {|us, option| SCR.get_arg(option) || us}
32
+ next matched if matched
33
+ next frm if used
34
+ end
35
+
36
+ # File/Folder check
37
+ file = File.expand_path(file)
38
+ if File.directory?(file)
39
+ folder = file
40
+ file = Dir.glob("#{file}/*").reject {|f| File.directory?(f)}
41
+ ext = (format && formats[format][:extname]) || [File.extname(file.first)]
42
+ file = file.select {|f| ext.any? {|e| File.extname(f) == e}}.tap do |files|
43
+ if files.empty?
44
+ session.log(:error) {
45
+ "Could not find any file with extension: #{ext} in folder '#{folder}'"
46
+ }
47
+ exit(1)
45
48
  end
46
- else
47
- ext = File.extname(file)
48
49
  end
50
+ else
51
+ ext = File.extname(file)
52
+ end
49
53
 
50
- format ||= formats.reduce(nil) do |matched, (frm, selectors)|
51
- next matched if matched
52
- next frm if selectors[:extname].any? {|e| ext == e}
53
- end
54
- format ||= :csv
54
+ format ||= formats.reduce(nil) do |matched, (frm, selectors)|
55
+ next matched if matched
56
+ next frm if selectors[:extname].any? {|e| ext == e}
57
+ end
58
+ format ||= :csv
55
59
 
56
- options.deep_merge!(input: {file: {name: file}})
57
- options.deep_merge!(input: {file: {format: format}})
60
+ options.deep_merge!(input: {file: {name: file}})
61
+ options.deep_merge!(input: {file: {format: format}})
58
62
 
59
- encoding = options.dig(:input, :file, :encoding)
63
+ encoding = options.dig(:input, :file, :encoding)
60
64
 
61
- case format
62
- when :xml
63
- [file].flatten.each {|f| session.config.files.validate(:xml, f)}
64
- kargs = {file: file, format: format}
65
- kargs.merge!(encoding: encoding) if encoding
66
- input = session.entries(**kargs)
67
- when :xls
68
- input = session.entries(file: file, format: format)
69
- when :json
70
- input = [file].flatten.reduce(Eco::API::Organization::People.new([])) do |people, filename|
71
- people.merge(JSON.parse(File.read(filename)))
72
- end
73
- else # :csv
74
- kargs = {check_headers: true}
75
- kargs.merge!(encoding: encoding) if encoding
76
- input = session.csv_entries(file, **kargs)
65
+ case format
66
+ when :xml
67
+ [file].flatten.each {|f| session.config.files.validate(:xml, f)}
68
+ kargs = {file: file, format: format}
69
+ kargs.merge!(encoding: encoding) if encoding
70
+ input = session.entries(**kargs)
71
+ when :xls
72
+ input = session.entries(file: file, format: format)
73
+ when :json
74
+ input = [file].flatten.reduce(Eco::API::Organization::People.new([])) do |people, filename|
75
+ people.merge(JSON.parse(File.read(filename)))
77
76
  end
77
+ else # :csv
78
+ kargs = {check_headers: true}
79
+ kargs.merge!(encoding: encoding) if encoding
80
+ input = session.csv_entries(file, **kargs)
78
81
  end
82
+
79
83
  input
80
84
  end
81
85
  end
@@ -1,47 +1,62 @@
1
1
  ASSETS.cli.config do |cnf|
2
2
  cnf.input_filters do |filters|
3
-
4
- filters.add("-input-filter-tags-all", "only those that have ALL the specified tags separated by '|'") do |input, session, options|
3
+ desc = "only those that have ALL the specified tags separated by '|'"
4
+ filters.add("-input-filter-tags-all", desc) do |input, session, options|
5
5
  tags = SCR.get_arg("-input-filter-tags-all", with_param: true).upcase.split("|")
6
+
6
7
  options.deep_merge!(input: {filter: {filter_tags: {all: tags}}})
8
+
7
9
  input.filter_tags_all(tags).tap do |filtered|
8
- msg = "Filtered #{filtered.count} entries (out of #{input.count}) with 'all' filter_tags #{tags}"
9
- session.logger.info(msg)
10
+ msg = "Filtered #{filtered.count} entries (out of #{input.count})"
11
+ msg << " with 'all' filter_tags #{tags}"
12
+ session.log(:info) { msg }
10
13
  end
11
14
  end
12
15
 
13
- filters.add("-input-filter-tags-any", "only those that have ANY the specified tags separated by '|'") do |input, session, options|
16
+ desc = "only those that have ANY the specified tags separated by '|'"
17
+ filters.add("-input-filter-tags-any", desc) do |input, session, options|
14
18
  tags = SCR.get_arg("-input-filter-tags-any", with_param: true).upcase.split("|")
19
+
15
20
  options.deep_merge!(input: {filter: {filter_tags: {any: tags}}})
21
+
16
22
  input.filter_tags_any(tags).tap do |filtered|
17
- msg = "Filtered #{filtered.count} entries (out of #{input.count}) with 'any' filter_tags #{tags}"
18
- session.logger.info(msg)
23
+ msg = "Filtered #{filtered.count} entries (out of #{input.count})"
24
+ msg << " with 'any' filter_tags #{tags}"
25
+ session.log(:info) { msg }
19
26
  end
20
27
  end
21
28
 
22
- filters.add("-input-filter-tags-tree", "only those that have ANY tag in the specified subtrees separated by '|'") do |input, session, options|
29
+ desc = "only those that have ANY tag in the specified subtrees separated by '|'"
30
+ filters.add("-input-filter-tags-tree", desc) do |input, session, options|
23
31
  top_tags = SCR.get_arg("-input-filter-tags-tree", with_param: true).upcase.split("|")
24
- tags = top_tags.each_with_object([]) do |top, tags|
25
- tags.concat(session.tagtree.node(top).tags)
32
+ tags = top_tags.each_with_object([]) do |top, tgs|
33
+ tgs.concat(session.tagtree.node(top).tags)
26
34
  end.uniq
35
+
27
36
  options.deep_merge!(input: {filter: {filter_tags: {tree: top_tags, any: tags}}})
37
+
28
38
  input.filter_tags_any(tags).tap do |filtered|
29
- msg = "Filtered #{filtered.count} entries (out of #{input.count}) with 'any' filter_tags in subtrees #{top_tags}"
30
- session.logger.info(msg)
39
+ msg = "Filtered #{filtered.count} entries (out of #{input.count})"
40
+ msg << " with 'any' filter_tags in subtrees #{top_tags}"
41
+ session.log(:info) { msg }
31
42
  end
32
43
  end
33
44
 
34
- filters.add("-input-no-id", "only those that do not have 'id' or 'external_id' specified") do |input, session, options|
45
+ desc = "only those that do not have 'id' or 'external_id' specified"
46
+ filters.add("-input-no-id", desc) do |input, _sess, options|
35
47
  options.deep_merge!(input: {filter: {external_id: nil}})
48
+
36
49
  input.select do |entry|
37
- !!(entry.id || entry.external_id)
38
- end.yield_self do |filtered|
50
+ entry.id || entry.external_id
51
+ end.then do |filtered|
39
52
  input.newFrom filtered
40
53
  end
41
54
  end
42
55
 
43
- filters.add("-input-supervisor-id", "only those with certain supervisor id or external_id") do |input, session, options|
44
- id = SCR.get_arg("-input-supervisor-id", with_param: true)
56
+ desc = "only those with certain supervisor id or external_id"
57
+ filters.add("-input-supervisor-id", desc) do |input, _sess, options|
58
+ id = SCR.get_arg("-input-supervisor-id", with_param: true)
59
+
45
60
  options.deep_merge!(input: {filter: {supervisor_id: id}})
46
61
  #unless sup = entries.find({"id" => id, "external_id" => id})
47
62
  # raise "Could not find anyone in the input with that id '#{id}'"
@@ -7,18 +7,22 @@ ASSETS.cli.config do |cnf| # rubocop:disable Metrics/BlockLength
7
7
  if (there = SCR.get_arg(opt))
8
8
  refine = SCR.get_arg(opt, with_param: true)
9
9
  end
10
+
10
11
  refine || there
11
12
  end
12
13
 
13
14
  if (hpf = active.call("-filters"))
14
15
  puts conf.people_filters.help(refine: hpf)
15
16
  end
17
+
16
18
  if (hif = active.call("-input-filters"))
17
19
  puts conf.input_filters.help(refine: hif)
18
20
  end
21
+
19
22
  if (ho = active.call("-options"))
20
23
  puts conf.options_set.help(refine: ho)
21
24
  end
25
+
22
26
  if (huc = active.call("-usecases"))
23
27
  puts conf.usecases.help(refine: huc)
24
28
  end
@@ -64,13 +68,13 @@ ASSETS.cli.config do |cnf| # rubocop:disable Metrics/BlockLength
64
68
 
65
69
  unless sch_id
66
70
  msg = "You need to specify a correct schema id or name. '#{sch_name}' does not exist"
67
- session.logger.error(msg)
71
+ session.log(:error) { msg }
68
72
  exit(1)
69
73
  end
70
-
71
74
  options.deep_merge!(people: {filter: {details: {schema_id: sch_id}}})
72
- session.logger.info("Setting schema #{session.schemas.to_name(sch_id)}")
73
-
75
+ session.log(:info) {
76
+ "Setting schema #{session.schemas.to_name(sch_id)}"
77
+ }
74
78
  session.schema = sch_id
75
79
  end
76
80
 
@@ -24,7 +24,7 @@ ASSETS.cli.config do |cnf|
24
24
  msg = "(Optimization) "
25
25
  msg << "Switching from partial to full people download. "
26
26
  msg << "Input (#{input.count}) surpases MAX_GET_PARTIAL (#{MAX_GET_PARTIAL}) entries."
27
- session.logger.info(msg)
27
+ session.log(:info) { msg }
28
28
 
29
29
  options.deep_merge!(people: {
30
30
  get: {
@@ -1,22 +1,21 @@
1
- ASSETS.cli.config do |cnf|
2
- cnf.people_filters do |filters|
3
-
4
- filters.add("-only-users", "only those with account") do |people, session, options|
1
+ ASSETS.cli.config do |cnf| # rubocop:disable Metrics/BlockLength
2
+ cnf.people_filters do |filters| # rubocop:disable Metrics/BlockLength
3
+ filters.add("-only-users", "only those with account") do |people, _sess, options|
5
4
  options.deep_merge!(people: {filter: {account: true}})
6
5
  people.users
7
6
  end
8
7
 
9
- filters.add("-no-account", "only those with no account") do |people, session, options|
8
+ filters.add("-no-account", "only those with no account") do |people, _sess, options|
10
9
  options.deep_merge!(people: {filter: {account: false}})
11
10
  people.account_present(false)
12
11
  end
13
12
 
14
- filters.add("-with-details", "only those with details") do |people, session, options|
13
+ filters.add("-with-details", "only those with details") do |people, _sess, options|
15
14
  options.deep_merge!(people: {filter: {details: true}})
16
15
  people.details_present
17
16
  end
18
17
 
19
- filters.add("-no-id", "only those with no external_id") do |people, session, options|
18
+ filters.add("-no-id", "only those with no external_id") do |people, _sess, options|
20
19
  options.deep_merge!(people: {filter: {external_id: nil}})
21
20
  people.external_id_present(false)
22
21
  end
@@ -27,25 +26,29 @@ ASSETS.cli.config do |cnf|
27
26
  # end
28
27
 
29
28
  filters.add("-supervisor-id", "only those with certain supervisor") do |people, session, options|
30
- id = SCR.get_arg("-supervisor-id", with_param: true)
29
+ id = SCR.get_arg("-supervisor-id", with_param: true)
31
30
  options.deep_merge!(people: {filter: {supervisor_id: id}})
32
- unless sup = session.micro.with_supervisor(id, people, strict: true)
31
+
32
+ unless (sup = session.micro.with_supervisor(id, people, strict: true))
33
33
  status = session.batch.search([{"id" => id}])
34
34
  sup = status.people.first
35
35
  end
36
+
36
37
  unless sup
37
- session.logger.error("Supervisor with id '#{id}' does not exist")
38
+ session.log(:error) {
39
+ "Supervisor with id '#{id}' does not exist"
40
+ }
38
41
  exit(1)
39
42
  end
40
43
 
41
44
  people.supervisor_id(sup.id)
42
45
  end
43
46
 
44
- filters.add("-no-default-tag", "only those users with no default tag") do |people, session, options|
47
+ filters.add("-no-default-tag", "only those users with no default tag") do |people, _sess, options|
45
48
  options.deep_merge!(people: {filter: {account: {default_tag: nil}}})
46
- people.users.select do |person|
47
- !person.account.default_tag
48
- end.yield_self do |filtered|
49
+ people.users.reject do |person|
50
+ person.account.default_tag
51
+ end.then do |filtered|
49
52
  people.newFrom filtered
50
53
  end
51
54
  end
@@ -56,7 +59,7 @@ ASSETS.cli.config do |cnf|
56
59
  options.deep_merge!(input: {filter: {filter_tags: {any: tags}}})
57
60
  people.filter_tags_all(tags).tap do |filtered|
58
61
  msg = "Filtered #{filtered.count} people (out of #{people.count}) with 'all' filter_tags #{tags}"
59
- session.logger.info(msg)
62
+ session.log(:info) { msg }
60
63
  end
61
64
  end
62
65
 
@@ -66,20 +69,21 @@ ASSETS.cli.config do |cnf|
66
69
  options.deep_merge!(input: {filter: {filter_tags_any: tags}})
67
70
  people.filter_tags_any(tags).tap do |filtered|
68
71
  msg = "Filtered #{filtered.count} people (out of #{people.count}) with 'any' filter_tags #{tags}"
69
- session.logger.info(msg)
72
+ session.log(:info) { msg }
70
73
  end
71
74
  end
72
75
 
73
76
  desc = "only those that have ANY tag in the specified subtrees separated by '|'"
74
77
  filters.add("-filter-tags-tree", desc) do |people, session, options|
75
78
  top_tags = SCR.get_arg("-filter-tags-tree", with_param: true).upcase.split("|").compact
76
- tags = top_tags.each_with_object([]) do |top, tags|
77
- tags.concat(session.tagtree.node(top).tags)
79
+ tags = top_tags.each_with_object([]) do |top, tgs|
80
+ tgs.concat(session.tagtree.node(top).tags)
78
81
  end.uniq
79
82
  options.deep_merge!(input: {filter: {filter_tags: {tree: top_tags, any: tags}}})
80
83
  people.filter_tags_any(tags).tap do |filtered|
81
- msg = "Filtered #{filtered.count} people (out of #{people.count}) with 'any' filter_tags in subtrees #{top_tags}"
82
- session.logger.info(msg)
84
+ msg = "Filtered #{filtered.count} people (out of #{people.count})"
85
+ msg << " with 'any' filter_tags in subtrees #{top_tags}"
86
+ session.log(:info) { msg }
83
87
  end
84
88
  end
85
89
 
@@ -89,17 +93,21 @@ ASSETS.cli.config do |cnf|
89
93
 
90
94
  unless sch_id
91
95
  msg = "You need to specify a correct schema id or name. '#{sch_name}' does not exist"
92
- session.logger.error(msg)
96
+ session.log(:error) { msg }
93
97
  exit(1)
94
98
  end
95
99
 
96
100
  options.deep_merge!(people: {filter: {details: {schema_id: sch_id}}})
97
- session.logger.info("Filtering people records with schema #{session.schemas.to_name(sch_id)}")
101
+ session.log(:info) {
102
+ "Filtering people records with schema #{session.schemas.to_name(sch_id)}"
103
+ }
98
104
 
99
105
  people.select do |person|
100
106
  person.details && (person.details.schema_id == sch_id)
101
- end.yield_self do |filtered|
102
- session.logger.info("Filtered #{filtered.count} people out of #{people.count} total")
107
+ end.then do |filtered|
108
+ session.log(:info) {
109
+ "Filtered #{filtered.count} people out of #{people.count} total"
110
+ }
103
111
  people.newFrom filtered
104
112
  end
105
113
  end