eco-helpers 2.0.46 → 2.0.50

Sign up to get free protection for your applications and to get access to all the features.
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