eco-helpers 2.0.46 → 2.0.50

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd9b2a6564e5ce38fa3ed762ab04f5e4e79b1a6580738d9091b846233c6fb66e
4
- data.tar.gz: ac0200ad60b30fc0d40997b4975f016daee8cd48c881bfecae106ca0867ff123
3
+ metadata.gz: 9c8f3ba10e4524d33de8f1339a48fa9c48c86a7e1b0650e29710d05083b6ed82
4
+ data.tar.gz: f68a0adda4ccebff9552e652bc47bc25cbc72129fe025e5c31b9c542b83ed9f3
5
5
  SHA512:
6
- metadata.gz: f72270169fd60eaee60b27d333391bc6d2235fe856752d9f7dcd5d5aca18fd129e148cd0830bea37cd86833cabc64f10e4fb09e71c4ba2ba9b6912313da82b4a
7
- data.tar.gz: 690b338d062020a6d80794d794f00f8ce9c263bb8b12a84f774f50193bd49ff474b6a49f670a1e05df9a2db88f70d3639c54582fc8706617c44123753c0a7b9e
6
+ metadata.gz: 215c64f98db5f29daad59fad9b4f559e0c7e2a136671d87ab9e37a6e2403cafb123948fbb8cd852ddb3155f35e4b52545d9d948df638402f7c3a63797a397690
7
+ data.tar.gz: 8a6119977b69ef6aa699ed718142d377866c1c5f379027b9b5713655525f578f837cf543df70be3dbeee1868cd6328f12ee782b1ba743f1aa87ce4cc592bc2cb
data/CHANGELOG.md CHANGED
@@ -1,6 +1,53 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [2.0.50] - 2022-02-xx
5
+
6
+ ### Added
7
+ - Ability to configure delay between jobs and job groups
8
+ - `Eco::API::Session::Batch::Jobs`, `#delay_between_jobs`
9
+ - `Eco::API::Session::Batch::JobsGroups`, `#delay_between_groups`
10
+ - `Eco::API::Session::Config`, added methods `#delay_between_jobs` and `#delay_between_job_groups`
11
+ - New use case `Eco::API::UseCases::DefaultCases::TagPaths` to create a `csv` with all `tag` paths
12
+ - Its purpose is to ease the build of tag remaps
13
+ - Ideally, after remapping the tags of an org, you would want to fix the tag paths based on the current tagtree
14
+
15
+ ### Changed
16
+ - `workflow`, when no operation specified it logs as `info`, rather than `warn`
17
+
18
+ ### Fixed
19
+
20
+ ## [2.0.49] - 2022-02-14
21
+
22
+ ### Added
23
+ - `Eco::API::Session::Batch::RequestStats#message` now it shows which details have changed
24
+ - `Eco::API::UseCases::DefaultCases::ReinviteTransCase` the option `-force` will also send an invite to users that have accepted the invitation
25
+
26
+ ## [2.0.48] - 2022-02-04
27
+
28
+ ### Changed
29
+ - upgraded `ecoportal-api-v2` dependency
30
+
31
+ ### Fixed
32
+ - `Eco::API::Common::People::EntryFactory#get_file_content`
33
+ - Call to `String#scrub` to prevent _invalid byte sequence_ error by replacing those characters by their coding identifier
34
+ - This has been implemented with a max tolerance of 5 byte sequence errors
35
+ - Errors are logged (although could not get to identify the line :/)
36
+
37
+ ## [2.0.47] - 2022-02-03
38
+
39
+ ### Added
40
+ - `Eco::API::UseCases::DefaultCases::CleanUnknownTags`
41
+ - It is possible to extend or override `register_tags`
42
+ - New command option `-include-register-tags` (will not ignore register tags; they will be removed too)
43
+ - `Eco::API::UseCases::DefaultCases::Samples::Sftp`
44
+ - Default sample case to list, get and archive SFTP remote files
45
+ ### Changed
46
+ - upgraded `ecoportal-api-v2` dependency
47
+
48
+ ### Fixed
49
+ - `Eco::API::Common::Session::S3Uploader#upload_file`: check if file exists before opening.
50
+
4
51
  ## [2.0.46] - 2021-12-24
5
52
 
6
53
  ### Added
@@ -9,7 +56,7 @@ All notable changes to this project will be documented in this file.
9
56
  - added also counter of failed to retrieve oozes
10
57
  - added also counter of double ups in search pagination
11
58
  - counter for updated pages and pages that failed update
12
- - `Eco::API::Session#enviro_name`: to identify in whic environment we are running
59
+ - `Eco::API::Session#enviro_name`: to identify in which environment we are running
13
60
 
14
61
  ### Changed
15
62
  - upgraded `ecoportal-api-v2` dependency
data/eco-helpers.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 3.6"
32
32
 
33
33
  spec.add_dependency 'ecoportal-api', '>= 0.8.4', '< 0.9'
34
- spec.add_dependency 'ecoportal-api-v2', '>= 0.8.23', '< 0.9'
34
+ spec.add_dependency 'ecoportal-api-v2', '>= 0.8.25', '< 0.9'
35
35
  spec.add_dependency 'aws-sdk-s3', '>= 1.83.0', '< 2'
36
36
  spec.add_dependency 'aws-sdk-ses', '>= 1.36.0', '< 2'
37
37
  spec.add_dependency 'dotenv', '>= 2.7.6', '< 2.8'
@@ -196,7 +196,23 @@ module Eco
196
196
  ext = File.extname(file)
197
197
  encoding ||= Eco::API::Common::Session::FileManager.encoding(file)
198
198
  encoding = (encoding != "utf-8")? "#{encoding}|utf-8": encoding
199
- content = File.read(file, encoding: encoding)
199
+ read_with_tolerance(file, encoding: encoding)
200
+ end
201
+
202
+ def read_with_tolerance(file, encoding:)
203
+ if content = File.read(file, encoding: encoding)
204
+ tolerance = 5
205
+ content.scrub do |bytes|
206
+ replacement = '<' + bytes.unpack('H*')[0] + '>'
207
+ if tolerance <= 0
208
+ logger.error("There were more than 5 encoding errors in the file '#{file}'.")
209
+ return content
210
+ else
211
+ logger.error("Encoding problem in file '#{file}': '#{replacement}'.")
212
+ replacement
213
+ end
214
+ end
215
+ end
200
216
  end
201
217
 
202
218
  def fatal(msg)
@@ -32,8 +32,10 @@ module Eco
32
32
  # @param path [String] the target file to be uploaded
33
33
  # @return [String] S3 path to the uploaded `path` file
34
34
  def upload_file(path)
35
- File.open(path, "rb") do |f|
36
- upload(File.basename(path), f)
35
+ if File.exist?(path)
36
+ File.open(path, "rb") do |f|
37
+ upload(File.basename(path), f)
38
+ end
37
39
  end
38
40
  end
39
41
 
@@ -3,6 +3,8 @@ module Eco
3
3
  class Session
4
4
  class Batch
5
5
  class Jobs < API::Common::Session::BaseSession
6
+ DELAY_BETWEEN_JOBS = 0.3
7
+
6
8
  include Enumerable
7
9
  attr_reader :name
8
10
 
@@ -87,11 +89,12 @@ module Eco
87
89
  # - if there was post-launch callback for a `Batch::Job`, it calls it.
88
90
  # @return [Hash<Eco::API::Session::Batch::Job, Eco::API::Session::Batch::Status>]
89
91
  def launch(simulate: false)
90
- each do |job|
92
+ each_with_index do |job, idx|
91
93
  if job.pending?
92
94
  status[job] = job_status = job.launch(simulate: simulate)
93
95
  callback = @callbacks[job]
94
96
  callback.call(job, job_status) if callback
97
+ Eco::API::Session::Batch::JobsGroups.counter(delay_between_jobs) if !simulate && idx < self.length - 1
95
98
  end
96
99
  end
97
100
  launch(simulate: simulate) if pending?
@@ -125,6 +128,11 @@ module Eco
125
128
  end.join("\n")
126
129
  end
127
130
 
131
+ private
132
+
133
+ def delay_between_jobs
134
+ config.delay_between_jobs || DELAY_BETWEEN_JOBS
135
+ end
128
136
  end
129
137
  end
130
138
  end
@@ -93,10 +93,10 @@ module Eco
93
93
  status[group] = group_status = group.launch(simulate: simulate)
94
94
  callback = @callbacks[group]
95
95
  callback.call(group, group_status) if callback
96
- self.class.counter(DELAY_BETWEEN_GROUPS) if !simulate && idx < @order.length - 1
96
+ self.class.counter(delay_between_groups) if !simulate && idx < @order.length - 1
97
97
  end
98
98
  end
99
- launch(simulate: simulate) if pending?
99
+ launch(simulate: simulate) if pending?
100
100
  return status
101
101
  end
102
102
 
@@ -127,6 +127,11 @@ module Eco
127
127
  end.join("\n")
128
128
  end
129
129
 
130
+ private
131
+
132
+ def delay_between_groups
133
+ config.delay_between_job_groups || DELAY_BETWEEN_GROUPS
134
+ end
130
135
  end
131
136
  end
132
137
  end
@@ -9,6 +9,7 @@ module Eco
9
9
  ACCOUNT_ATTRS = (Eco::API::Common::People::PersonParser::ACCOUNT_ATTRS + ["permissions_custom"]).uniq
10
10
  DETAILS_ATTRS = ["fields"]
11
11
  BLANKED_PREFIX = "blanked_"
12
+ DETAILS_FIELDS = "details_fields"
12
13
 
13
14
  class << self
14
15
 
@@ -74,44 +75,43 @@ module Eco
74
75
  end
75
76
 
76
77
  def message(percent: false)
77
- key_val_delimiter = ": "; attr_delimiter = " ++ "
78
- pairs_to_line = Proc.new do |pairs|
79
- pairs.map do |p|
80
- [p.first.to_s, "#{p.last.to_s}" + (percent ? "%" : "")].join(key_val_delimiter)
81
- end.join(attr_delimiter)
82
- end
83
-
84
78
  lines = []
85
- lines << pairs_to_line.call(core_pairs(percent: percent))
86
- lines << pairs_to_line.call(account_pairs(percent: percent))
87
- lines << pairs_to_line.call(details_pairs(percent: percent))
79
+ lines << pairs_to_line(core_pairs(percent: percent))
80
+ lines << pairs_to_line(account_pairs(percent: percent))
81
+ lines << pairs_to_line(details_pairs(percent: percent))
88
82
  lines.join("\n")
89
83
  end
90
84
 
91
85
  private
92
86
 
93
- def attr(attr, percent: false, total: count)
94
- i = @stats["#{attr}"]
87
+ def attr_value(attr, percent: false, total: count, details: false)
88
+ target = details ? (@stats[DETAILS_FIELDS] || {}) : @stats
89
+ i = target["#{attr}"]
95
90
  return i unless percent
96
91
  percentage(i, total: total)
97
92
  end
98
93
 
99
94
  def core(percent: false)
100
- attr("core", percent: percent)
95
+ attr_value("core", percent: percent)
101
96
  end
102
97
 
103
98
  def account(percent: false)
104
- attr("account", percent: percent)
99
+ attr_value("account", percent: percent)
105
100
  end
106
101
 
107
102
  def details(percent: false)
108
- attr("details", percent: percent)
103
+ attr_value("details", percent: percent)
104
+ end
105
+
106
+ def stats
107
+ @stats ||= Hash.new(0)
109
108
  end
110
109
 
111
110
  def build(requests)
112
- Hash.new(0).tap do |stats|
111
+ stats.tap do |stats|
113
112
  stats[type] = count
114
113
  unless !requests || !requests.is_a?(Enumerable) || requests.empty?
114
+ stats[DETAILS_FIELDS] = Hash.new(0)
115
115
  requests.each_with_index do |request|
116
116
  add_core_stats(stats, request || {})
117
117
  add_account_stats(stats, request || {})
@@ -149,16 +149,15 @@ module Eco
149
149
  if request.key?("details")
150
150
  stats["details"] += 1
151
151
  stats["details_remove"] += 1 if !request["details"]
152
+
153
+ det_attrs = {}
152
154
  if fields = request.dig("details", "fields")
153
155
  stats["fields"] += fields.length
156
+ det_attrs = fields.each_with_object(det_attrs) {|fld, hash| hash[fld["alt_id"]] = fld["value"]}
154
157
  end
155
- end
156
- end
157
158
 
158
- def pairs(attrs, percent: false, total: count)
159
- pairs = attrs.map do |a|
160
- (v = attr(a, percent: percent, total: count)) > 0 ? [a, v] : nil
161
- end.compact
159
+ attrs_to_stat(stats[DETAILS_FIELDS], det_attrs, det_attrs.keys)
160
+ end
162
161
  end
163
162
 
164
163
  def core_pairs(percent: false)
@@ -172,22 +171,23 @@ module Eco
172
171
  end
173
172
 
174
173
  def details_pairs(percent: false)
175
- details_pairs = [["details", details(percent: percent)]]
176
- details_pairs += [["fields", fields_average]] if attr("fields") && fields_average
177
- details_pairs += pairs(["details_remove"], percent: percent, total: details)
174
+ det_pairs = [["details", details(percent: percent)]]
175
+ det_pairs += [["fields", fields_average]] if attr_value("fields") && fields_average
176
+ det_pairs += pairs(["details_remove"], percent: percent, total: details)
177
+ det_pairs += pairs(details_field_attrs, percent: percent, total: details, details: true)
178
178
  end
179
179
 
180
- def fields_average
181
- if (fields_num = attr("fields")) && (total = details) > 0
182
- (fields_num.to_f / total.to_f).round(2)
183
- end
180
+ def pairs(attrs, percent: false, total: count, details: false)
181
+ pairs = attrs.map do |a|
182
+ (v = attr_value(a, percent: percent, total: count, details: details)) > 0 ? [a, v] : nil
183
+ end.compact
184
184
  end
185
185
 
186
- def percentage(num, total: count)
187
- total ||= count
188
- if num
189
- (num.to_f / total * 100).round(2)
190
- end
186
+ def pairs_to_line(pairs, percent: false)
187
+ key_val_delimiter = ": "; attr_delimiter = " ++ "
188
+ pairs.map do |p|
189
+ [p.first.to_s, "#{p.last.to_s}" + (percent ? "%" : "")].join(key_val_delimiter)
190
+ end.join(attr_delimiter)
191
191
  end
192
192
 
193
193
  def core_attrs
@@ -202,6 +202,10 @@ module Eco
202
202
  @details_attrs ||= self.class.details_attrs
203
203
  end
204
204
 
205
+ def details_field_attrs
206
+ @stats[DETAILS_FIELDS].keys
207
+ end
208
+
205
209
  def blank_attrs(attrs)
206
210
  self.class.blank_attrs(attrs)
207
211
  end
@@ -225,6 +229,18 @@ module Eco
225
229
  end
226
230
  end
227
231
 
232
+ def fields_average
233
+ if (fields_num = attr_value("fields")) && (total = details) > 0
234
+ (fields_num.to_f / total.to_f).round(2)
235
+ end
236
+ end
237
+
238
+ def percentage(num, total: count)
239
+ total ||= count
240
+ if num
241
+ (num.to_f / total * 100).round(2)
242
+ end
243
+ end
228
244
  end
229
245
  end
230
246
  end
@@ -363,6 +363,18 @@ module Eco
363
363
  yield(wf) if block_given?
364
364
  end
365
365
  end
366
+
367
+ # @return [nil, Interger] seconds between jobs
368
+ def delay_between_jobs(seconds = nil)
369
+ self["delay_between_jobs"] = seconds if seconds
370
+ self["delay_between_jobs"]
371
+ end
372
+
373
+ # @return [nil, Interger] seconds between job groups
374
+ def delay_between_job_groups(seconds = nil)
375
+ self["delay_between_job_groups"] = seconds if seconds
376
+ self["delay_between_job_groups"]
377
+ end
366
378
  # @!endgroup
367
379
 
368
380
  end
@@ -2,6 +2,8 @@ class Eco::API::UseCases::DefaultCases::CleanUnknownTags < Eco::API::Common::Loa
2
2
  name "clean-unknown-tags"
3
3
  type :transform
4
4
 
5
+ UNKNOWN_LOCS_FILE = "unknown_locations.txt"
6
+
5
7
  REGISTER_TAGS = [
6
8
  "EVENT", "INJURY", "RISK", "CONTRACTOR", "PERMIT",
7
9
  "AUDIT", "JSEA",
@@ -20,18 +22,52 @@ class Eco::API::UseCases::DefaultCases::CleanUnknownTags < Eco::API::Common::Loa
20
22
  people.each do |person|
21
23
  unknown_tags = person.filter_tags.select {|tag| !tag?(tag)}
22
24
  person.filter_tags -= unknown_tags
25
+ unknown_tag!(*unknown_tags)
23
26
  update.add(person)
24
27
  end
25
28
  end
26
29
 
27
30
  private
28
31
 
32
+ def unknown_tag!(*tags)
33
+ tags.each do |value|
34
+ unless unknown.include?(value)
35
+ unknown << value
36
+ File.open(unknown_tags_file, 'a') do |fd|
37
+ fd.write("#{value}\n")
38
+ end
39
+ puts "Custom detected: '#{value}'"
40
+ end
41
+ end
42
+ end
43
+
44
+ def register_tags
45
+ REGISTER_TAGS
46
+ end
47
+
48
+ def unknown
49
+ @unknown ||= []
50
+ end
51
+
29
52
  def tag?(value)
30
- tagtree.tag?(value) || REGISTER_TAGS.any? {|reg| value == reg}
53
+ tagtree.tag?(value).yield_self do |is_loc|
54
+ next true if is_loc
55
+ if clean_register_tags?
56
+ register_tags.any? {|reg| value == reg}
57
+ end
58
+ end
31
59
  end
32
60
 
33
61
  def tagtree
34
62
  @tagtree ||= ASSETS.config.tagtree
35
63
  end
36
64
 
65
+ def unknown_tags_file
66
+ File.join(".","#{session.enviro_name}_#{UNKNOWN_LOCS_FILE}")
67
+ end
68
+
69
+ def clean_register_tags?
70
+ !options.dig(:usecase, :include_register_tags)
71
+ end
72
+
37
73
  end
@@ -0,0 +1,25 @@
1
+ class Eco::API::UseCases::DefaultCases::TagPaths < Eco::API::Common::Loaders::UseCase
2
+ name "create-tag-paths"
3
+ type :other
4
+
5
+ def main(session, options, usecase)
6
+ CSV.open("tag_paths.csv", "w") do |csv|
7
+ csv << ["Tag", "Path"]
8
+ tag_paths.each do |values|
9
+ csv << values
10
+ end
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def tag_paths
17
+ @tag_paths ||= tagtree.tags.map do |tag|
18
+ [tag, tagtree.path(tag).join("|")]
19
+ end
20
+ end
21
+
22
+ def tagtree
23
+ session.tagtree
24
+ end
25
+ end
@@ -2,16 +2,25 @@ class Eco::API::UseCases::DefaultCases::ReinviteTransCase < Eco::API::Common::Lo
2
2
  name "reinvite"
3
3
  type :transform
4
4
 
5
+ def main(people, session, options, usecase)
6
+ reinvite(people.users, session, options, usecase)
7
+ end
8
+
9
+ private
10
+
5
11
  def reinvite(users, session, options, usecase)
6
12
  invite = session.new_job("main", "invite", :update, usecase, :account)
7
13
  users.each do |person|
8
- person.account.send_invites = true
14
+ if force_invite?
15
+ person.account.send_invites = true
16
+ else
17
+ person.account.force_send_invites = true
18
+ end
9
19
  invite.add(person)
10
20
  end
11
21
  end
12
22
 
13
- def main(people, session, options, usecase)
14
- reinvite(people.users, session, options, usecase)
23
+ def force_invite?
24
+ options.dig(:force, :invite)
15
25
  end
16
-
17
26
  end
@@ -0,0 +1,109 @@
1
+ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loaders::UseCase
2
+ name "sftp-sample"
3
+ type :other
4
+
5
+ attr_reader :session
6
+
7
+ def main(session, options, usecase)
8
+ @session = session
9
+ options[:end_get] = false
10
+ raise "The SFTP is not configured" unless session.sftp?
11
+ case options.dig(:sftp, :command)
12
+ when :list
13
+ list_folder
14
+ when :get
15
+ get_files
16
+ when :get_last
17
+ get_last
18
+ when :archive
19
+ archive_files
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def file_pattern
26
+ raise "You should redefine the file_pattern function as a RegEx expression that matches the target remote file"
27
+ end
28
+
29
+ # Ex: "/IN/Personnel"
30
+ def remote_subfolder
31
+ raise "You should redefine remote_subfolder as the folder where the target file sits. Ex: /IN/Personnel"
32
+ end
33
+
34
+ def archive_subfolder
35
+ "Archive"
36
+ end
37
+
38
+ def with_remote_files
39
+ sftp.files(remote_folder, pattern: file_pattern).each do |remote_file|
40
+ yield(remote_file) if block_given?
41
+ end
42
+ end
43
+
44
+ def list_folder
45
+ puts "Listing remote folder: '#{remote_folder}':"
46
+ with_remote_files {|file| puts file.longname}
47
+ end
48
+
49
+ def get_files
50
+ with_remote_files.tap do |files|
51
+ unless files.empty?
52
+ file_names = files.map {|file| to_remote_path(file.name)}
53
+ puts "Getting the following files:"
54
+ puts file_names
55
+ sftp.download(file_names, local_folder: local_folder)
56
+ end
57
+ end
58
+ end
59
+
60
+ def get_last
61
+ with_remote_files.last.tap do |file|
62
+ if file
63
+ file_name = to_remote_path(file.name)
64
+ puts "Getting the following file: #{file_name}"
65
+ sftp.download(file_name, local_folder: local_folder)
66
+ end
67
+ end
68
+ end
69
+
70
+ def archive_files
71
+ with_remote_files do |file|
72
+ source = to_remote_path(file.name) # should probably be file.longname
73
+ dest = to_remote_path("#{archive_subfolder}/#{file.name}")
74
+ move_file(source, dest)
75
+ end.tap do |files|
76
+ puts "Moved the file(s) to the #{archive_subfolder} folder" unless files.empty?
77
+ end
78
+ end
79
+
80
+ def move_file(source, dest)
81
+ sftp.move(source, dest, 0x0001) do |response|
82
+ if response.ok?
83
+ puts "#{source}\n -to-> #{dest}"
84
+ else
85
+ puts "Could not move file #{source}"
86
+ end
87
+ end
88
+ end
89
+
90
+ def to_remote_path(file)
91
+ remote_folder + "/" + file
92
+ end
93
+
94
+ def local_folder
95
+ "."
96
+ end
97
+
98
+ def remote_folder
99
+ @remote_folder ||= sftp_config.remote_folder + remote_subfolder
100
+ end
101
+
102
+ def sftp_config
103
+ session.config.sftp
104
+ end
105
+
106
+ def sftp
107
+ session.sftp
108
+ end
109
+ end
@@ -0,0 +1,12 @@
1
+ module Eco
2
+ module API
3
+ class UseCases
4
+ class DefaultCases
5
+ module Samples
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ require_relative 'samples/sftp_case'
@@ -9,6 +9,7 @@ module Eco
9
9
  end
10
10
  end
11
11
 
12
+ require_relative 'default_cases/samples'
12
13
  require_relative 'default_cases/abstract_policygroup_abilities_case.rb'
13
14
  require_relative 'default_cases/analyse_people_case'
14
15
  require_relative 'default_cases/append_usergroups_case'
@@ -18,6 +19,7 @@ require_relative 'default_cases/codes_to_tags_case'
18
19
  require_relative 'default_cases/create_case'
19
20
  require_relative 'default_cases/create_details_case'
20
21
  require_relative 'default_cases/create_details_with_supervisor_case'
22
+ require_relative 'default_cases/create_tag_paths_case'
21
23
  require_relative 'default_cases/delete_trans_case'
22
24
  require_relative 'default_cases/delete_sync_case'
23
25
  require_relative 'default_cases/email_as_id_case'
@@ -87,9 +87,15 @@ ASSETS.cli.config do |cnf|
87
87
  options.deep_merge!(other: {file: {codes_column: col_codes}})
88
88
  end
89
89
 
90
+ desc = "Creates a CSV with the paths to each tag"
91
+ cases.add("-create-tag-paths", :other, desc, case_name: "create-tag-paths")
92
+
90
93
  desc = "Cleans from filter_tags those tags that are not present in the tagtree (as per tagtree.json file)."
91
94
  desc += " It will preserve standard register tags of most common registers (i.e. EVENT, RISK)."
92
95
  cases.add("-clean-unknown-tags", :transform, desc, case_name: "clean-unknown-tags")
96
+ .add_option("-include-register-tags", "Will also try to remove register tags") do |options|
97
+ options.deep_merge!(usecase: {include_register_tags: true})
98
+ end
93
99
 
94
100
  desc = "Removes the landing page or sets it to -page-id"
95
101
  cases.add("-reset-landing-page", :transform, desc, case_name: "reset-landing-page")
@@ -180,9 +186,15 @@ ASSETS.cli.config do |cnf|
180
186
 
181
187
  desc = "Re-sends invites to all filtered users that have not accepted the invite as yet"
182
188
  cases.add("-reinvite", :transform, desc, case_name: "reinvite")
189
+ .add_option("-force", "If also send an invite email to those that have accepted the invite") do |options|
190
+ options.deep_merge!(force: {invite: true})
191
+ end
183
192
 
184
193
  desc = "Re-sends invites to target users that have not accepted the invite as yet"
185
194
  cases.add("-reinvite-from", :sync, desc, case_name: "reinvite")
195
+ .add_option("-force", "If also send an invite email to those that have accepted the invite") do |options|
196
+ options.deep_merge!(force: {invite: true})
197
+ end
186
198
 
187
199
  desc = "Deletes everybody that has been filtered from the people manager"
188
200
  cases.add("-delete", :transform, desc, case_name: "delete")
@@ -80,7 +80,7 @@ ASSETS.cli.config do |config|
80
80
  wf.on(:usecases) do |wf_cases, io|
81
81
  unless config.usecases.process(io: io)
82
82
  msg = "No update operation specified... quitting"
83
- io.session.logger.warn(msg)
83
+ io.session.logger.info(msg)
84
84
  exit(1)
85
85
  end
86
86
  io
data/lib/eco/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = "2.0.46"
2
+ VERSION = "2.0.50"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eco-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.46
4
+ version: 2.0.50
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
@@ -136,7 +136,7 @@ dependencies:
136
136
  requirements:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
- version: 0.8.23
139
+ version: 0.8.25
140
140
  - - "<"
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0.9'
@@ -146,7 +146,7 @@ dependencies:
146
146
  requirements:
147
147
  - - ">="
148
148
  - !ruby/object:Gem::Version
149
- version: 0.8.23
149
+ version: 0.8.25
150
150
  - - "<"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0.9'
@@ -530,6 +530,7 @@ files:
530
530
  - lib/eco/api/usecases/default_cases/create_case.rb
531
531
  - lib/eco/api/usecases/default_cases/create_details_case.rb
532
532
  - lib/eco/api/usecases/default_cases/create_details_with_supervisor_case.rb
533
+ - lib/eco/api/usecases/default_cases/create_tag_paths_case.rb
533
534
  - lib/eco/api/usecases/default_cases/delete_sync_case.rb
534
535
  - lib/eco/api/usecases/default_cases/delete_trans_case.rb
535
536
  - lib/eco/api/usecases/default_cases/email_as_id_case.rb
@@ -546,6 +547,8 @@ files:
546
547
  - lib/eco/api/usecases/default_cases/remove_account_trans_case.rb
547
548
  - lib/eco/api/usecases/default_cases/reset_landing_page_case.rb
548
549
  - lib/eco/api/usecases/default_cases/restore_db_case.rb
550
+ - lib/eco/api/usecases/default_cases/samples.rb
551
+ - lib/eco/api/usecases/default_cases/samples/sftp_case.rb
549
552
  - lib/eco/api/usecases/default_cases/set_default_tag_case.rb
550
553
  - lib/eco/api/usecases/default_cases/set_supervisor_case.rb
551
554
  - lib/eco/api/usecases/default_cases/supers_cyclic_identify_case.rb