eco-helpers 1.3.13 → 1.3.18
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 +4 -4
- data/CHANGELOG.md +44 -0
- data/eco-helpers.gemspec +6 -6
- data/lib/eco/api/common/people/entries.rb +10 -5
- data/lib/eco/api/common/people/supervisor_helpers.rb +110 -100
- data/lib/eco/api/common/version_patches/ecoportal_api.rb +0 -2
- data/lib/eco/api/common/version_patches/ecoportal_api/account_preferences.rb +10 -29
- data/lib/eco/api/session/batch/errors.rb +9 -7
- data/lib/eco/api/usecases/default_cases/create_case.rb +1 -1
- data/lib/eco/api/usecases/default_cases/hris_case.rb +7 -6
- data/lib/eco/api/usecases/default_cases/set_default_tag_case.rb +6 -2
- data/lib/eco/api/usecases/default_cases/to_csv_case.rb +1 -1
- data/lib/eco/api/usecases/default_cases/to_csv_detailed_case.rb +13 -3
- data/lib/eco/api/usecases/default_cases/update_case.rb +6 -1
- data/lib/eco/api/usecases/default_cases/upsert_case.rb +1 -1
- data/lib/eco/version.rb +1 -1
- metadata +29 -24
- data/lib/eco/api/common/version_patches/ecoportal_api/external_people.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a61c411db84db417e4d9004d2e8f9359b423cb91ac31b40eaf390e9b3e7a4f0a
|
4
|
+
data.tar.gz: 3431111bd4259b33a8c6ac38ad5ce67226c4e2a8c9c95b311142d7896f9d68f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afae206900769f68a8733dbe72d3277cf610fd4d7e92a1adda5197685889511fb80c9a424987f59306c59fa251b79a6f929d0dfc566c301cd3703c5fc6c5a2bf
|
7
|
+
data.tar.gz: 19d0d4c7c3a24c194b02faee98bd2ad2c55d8a8d7522681f2d1918594207cf673b827e4a510646c1f21b302105290b7b31da41be98a80112ff6d8c0c6e398826
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,50 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [1.3.18] - 2020-07-xx
|
5
|
+
|
6
|
+
### Added
|
7
|
+
### Changed
|
8
|
+
### Fixed
|
9
|
+
- the `update` case was missing the code to use the `default_usergroup`
|
10
|
+
|
11
|
+
|
12
|
+
## [1.3.17] - 2020-07-06
|
13
|
+
|
14
|
+
### Added
|
15
|
+
### Changed
|
16
|
+
- the `hris` case should not only include as `leavers` those that have account, but anyone that leaves
|
17
|
+
* as we could have active people with no account
|
18
|
+
### Fixed
|
19
|
+
- `Eco::API::Session::Batch::Errors#errors`: fix error for empty `body` on response
|
20
|
+
|
21
|
+
## [1.3.16] - 2020-06-26
|
22
|
+
|
23
|
+
### Added
|
24
|
+
- `Eco::API::Common::People::Entries`, `#entry` & `#find` should allow for `strict` search (added parameter)
|
25
|
+
### Changed
|
26
|
+
- upgraded `ecoportal-api` gem dependency to minimum version `0.5.7`
|
27
|
+
- this includes the removal of some patches
|
28
|
+
- some gems update
|
29
|
+
### Fixed
|
30
|
+
- patched preferences (`kiosk` preferences should default to `nil`)
|
31
|
+
|
32
|
+
## [1.3.15] - 2020-06-11
|
33
|
+
|
34
|
+
### Added
|
35
|
+
- default usecase to export to `csv` (`-detailed`) now includes `"Supervisor Name"` column
|
36
|
+
### Changed
|
37
|
+
### Fixed
|
38
|
+
|
39
|
+
## [1.3.14] - 2020-06-10
|
40
|
+
|
41
|
+
### Added
|
42
|
+
- `Eco::API::Common::People::SupervisorHelpers` now has its methods as class methods
|
43
|
+
### Changed
|
44
|
+
- upgraded `ecoportal-api` gem dependency to minimum version `0.5.6`
|
45
|
+
### Fixed
|
46
|
+
|
47
|
+
|
4
48
|
## [1.3.13] - 2020-05-29
|
5
49
|
|
6
50
|
### Added
|
data/eco-helpers.gemspec
CHANGED
@@ -22,16 +22,16 @@ Gem::Specification.new do |s|
|
|
22
22
|
#s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
23
|
s.require_paths = ["lib"]
|
24
24
|
|
25
|
-
s.add_development_dependency "bundler", "~> 2.
|
26
|
-
s.add_development_dependency "rspec", "~> 3", ">= 3.
|
25
|
+
s.add_development_dependency "bundler", "~> 2.1", ">= 2.1.3"
|
26
|
+
s.add_development_dependency "rspec", "~> 3", ">= 3.9"
|
27
27
|
s.add_development_dependency "rake", "~> 12.3.0"
|
28
28
|
s.add_development_dependency "yard", "~> 0.9", ">= 0.9.18"
|
29
29
|
s.add_development_dependency "redcarpet", "~> 3.5", ">= 3.5.0"
|
30
30
|
|
31
|
-
s.add_dependency 'ecoportal-api', '~> 0.5', '>= 0.5.
|
32
|
-
s.add_dependency 'aws-sdk-s3', '~> 1
|
33
|
-
s.add_dependency 'aws-sdk-ses', '~> 1
|
34
|
-
s.add_dependency 'dotenv', '~> 2.
|
31
|
+
s.add_dependency 'ecoportal-api', '~> 0.5', '>= 0.5.8'
|
32
|
+
s.add_dependency 'aws-sdk-s3', '~> 1', '>= 1.64.0'
|
33
|
+
s.add_dependency 'aws-sdk-ses', '~> 1', '>= 1.29.0'
|
34
|
+
s.add_dependency 'dotenv', '~> 2.7', '>= 2.7.0'
|
35
35
|
s.add_dependency 'net-sftp', '~> 2.1', '>= 2.1.2'
|
36
36
|
|
37
37
|
end
|
@@ -50,23 +50,28 @@ module Eco
|
|
50
50
|
end
|
51
51
|
|
52
52
|
# Search function to find an `entry` based on one of different options
|
53
|
-
def entry(id: nil, external_id: nil, email: nil)
|
53
|
+
def entry(id: nil, external_id: nil, email: nil, strict: false)
|
54
54
|
init_caches
|
55
55
|
pers = nil
|
56
56
|
pers = @by_id[id]&.first if id
|
57
57
|
pers = @by_external_id[external_id&.strip]&.first if !pers && !external_id.to_s.strip.empty?
|
58
|
-
|
59
|
-
|
58
|
+
|
59
|
+
# strict prevents taking existing user for searched person with same email
|
60
|
+
# specially useful if the organisation ensures all have external id (no need for email search)
|
61
|
+
if !pers && (!strict || external_id.to_s.strip.empty?)
|
62
|
+
pers = @by_email[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
|
63
|
+
pers = @by_external_id[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
|
64
|
+
end
|
60
65
|
pers
|
61
66
|
end
|
62
67
|
|
63
68
|
# Search function to find an `entry` based on one of different options
|
64
69
|
# see Eco::API::Common::People::Entries#entry
|
65
|
-
def find(object)
|
70
|
+
def find(object, strict: false)
|
66
71
|
id = object.respond_to?("id")? object.send("id") : nil
|
67
72
|
external_id = object.respond_to?("external_id")? object.send("external_id") : nil
|
68
73
|
email = object.respond_to?("email")? object.send("email") : nil
|
69
|
-
entry(id: id, external_id: external_id, email: email)
|
74
|
+
entry(id: id, external_id: external_id, email: email, strict: strict)
|
70
75
|
end
|
71
76
|
|
72
77
|
def exclude(object)
|
@@ -7,134 +7,144 @@ module Eco
|
|
7
7
|
# * `external_id`
|
8
8
|
# * `id`
|
9
9
|
module SupervisorHelpers
|
10
|
+
def self.included(base)
|
11
|
+
base.send(:include, ClassMethods)
|
12
|
+
end
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
module ClassMethods
|
15
|
+
# Reorders as follows:
|
16
|
+
# 1. supervisors, people with no supervisor or where their supervisor not present
|
17
|
+
# 2. subordinates
|
18
|
+
def sort_by_supervisors(values, supervisors_first: true)
|
19
|
+
raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
|
20
|
+
return [] unless values && values.is_a?(Enumerable)
|
21
|
+
roam = Proc.new do |tree|
|
22
|
+
[].tap do |out|
|
23
|
+
sub_outs = tree.empty?? [] : tree.map {|sup, subtree| roam.call(subtree)}
|
24
|
+
tree.each do |sup, subtree|
|
25
|
+
sout = subtree.empty?? [] :roam.call(subtree)
|
26
|
+
supervisors_first ? sout.unshift(sup) : sout.push(sup)
|
27
|
+
out.concat(sout)
|
28
|
+
end
|
24
29
|
end
|
25
30
|
end
|
26
|
-
end
|
27
31
|
|
28
|
-
|
29
|
-
|
32
|
+
roam.call(supervisors_tree(values))
|
33
|
+
end
|
30
34
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
def tree_to_str(tree, lev: 0)
|
36
|
+
raise "Required Hash tree structure. Given: #{tree.class}" unless tree.is_a?(Hash)
|
37
|
+
"".tap do |str|
|
38
|
+
tree.each do |entry, subtree|
|
39
|
+
str << "#{" " * lev}+-- #{entry.id || entry.external_id}\n"
|
40
|
+
str << tree_to_str(subtree, lev: lev + 1) unless !subtree || subtree.empty?
|
41
|
+
end
|
37
42
|
end
|
38
43
|
end
|
39
|
-
end
|
40
44
|
|
41
|
-
|
42
|
-
|
43
|
-
|
45
|
+
def print_tree(tree, lev: 0)
|
46
|
+
puts tree_to_str(tree)
|
47
|
+
end
|
44
48
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
49
|
+
# Generates a `Hash` tree structure, where:
|
50
|
+
# * **keys** are nodes
|
51
|
+
# * **values** are `Hash` subtree structures of `key` subordinates
|
52
|
+
# @note it is resilient to cyclic supervisors (it will just add the last at the top)
|
53
|
+
# @param values [Enumerable<Object>] of objects with methods:
|
54
|
+
# `id`, `external_id` and `supervisor_id`
|
55
|
+
# @return [Hash] the tree structure
|
56
|
+
def supervisors_tree(values)
|
57
|
+
raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
|
58
|
+
return {} unless values && values.is_a?(Enumerable)
|
59
|
+
idx = get_super_indexes(values)
|
60
|
+
|
61
|
+
processed = []
|
62
|
+
subtree = Proc.new do |entry, level, toptree|
|
63
|
+
if processed.include?(entry)
|
64
|
+
next {} unless toptree.key?(entry) && level > 0
|
65
|
+
# needs to be moved as a child
|
66
|
+
subnodes = toptree.delete(entry)
|
67
|
+
processed.delete(entry)
|
68
|
+
end
|
65
69
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
subnodes ||= {}.tap do |tree|
|
71
|
+
subs = idx[:subordinates].call(entry)
|
72
|
+
processed.push(entry)
|
73
|
+
next nil unless subs && !subs.empty?
|
74
|
+
subs.each do |sub|
|
75
|
+
sub_tree = subtree.call(sub, level + 1, toptree)
|
76
|
+
tree.merge!(sub_tree)
|
77
|
+
end
|
73
78
|
end
|
74
|
-
end
|
75
79
|
|
76
|
-
|
77
|
-
|
80
|
+
{entry => subnodes}
|
81
|
+
end
|
78
82
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
{}.tap do |tree|
|
84
|
+
idx[:by_sup].keys.each do |sup_id|
|
85
|
+
if sup = idx[:supers][sup_id]
|
86
|
+
tree.merge!(subtree.call(sup, 0, tree))
|
87
|
+
else
|
88
|
+
idx[:by_sup][sup_id].each do |sub|
|
89
|
+
tree.merge!(subtree.call(sub, 0, tree))
|
90
|
+
end
|
86
91
|
end
|
87
92
|
end
|
88
93
|
end
|
89
94
|
end
|
90
|
-
end
|
91
95
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
96
|
+
private
|
97
|
+
|
98
|
+
def get_super_indexes(values)
|
99
|
+
raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
|
100
|
+
{}.tap do |indexes|
|
101
|
+
indexes[:by_id] = values.map do |e|
|
102
|
+
e.id && [e.id, e]
|
103
|
+
end.compact.to_h
|
104
|
+
indexes[:by_ext] = values.map do |e|
|
105
|
+
e.external_id && [e.external_id, e]
|
106
|
+
end.compact.to_h
|
107
|
+
|
108
|
+
indexes[:by_sup] = {}.tap do |by_s|
|
109
|
+
values.group_by do |e|
|
110
|
+
e.supervisor_id
|
111
|
+
end.tap do |by_sup|
|
112
|
+
by_s[nil] = by_sup.delete(nil) if by_sup.key?(nil)
|
113
|
+
by_s.merge!(by_sup)
|
114
|
+
end
|
110
115
|
end
|
111
|
-
end
|
112
116
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
117
|
+
indexes[:supers] = {}.tap do |sups|
|
118
|
+
indexes[:by_ext].select do |ext, e|
|
119
|
+
ext && indexes[:by_sup].key?(ext)
|
120
|
+
end.tap {|found| sups.merge!(found)}
|
121
|
+
indexes[:by_id].select do |id, e|
|
122
|
+
id && indexes[:by_sup].key?(id)
|
123
|
+
end.tap {|found| sups.merge!(found)}
|
124
|
+
end
|
121
125
|
|
122
|
-
|
123
|
-
|
124
|
-
|
126
|
+
indexes[:is_super] = Proc.new do |entry|
|
127
|
+
!!(indexes[:supers][entry.id] || indexes[:supers][entry.external_id])
|
128
|
+
end
|
125
129
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
130
|
+
indexes[:subordinates] = Proc.new do |entry|
|
131
|
+
subs = nil
|
132
|
+
if sup = indexes[:supers][entry.id] || indexes[:supers][entry.external_id]
|
133
|
+
subs ||= indexes[:by_sup][sup.id] unless !sup.id
|
134
|
+
subs ||= indexes[:by_sup][sup.external_id] unless !sup.external_id
|
135
|
+
end
|
136
|
+
subs
|
131
137
|
end
|
132
|
-
subs
|
133
138
|
end
|
139
|
+
|
134
140
|
end
|
135
141
|
|
136
142
|
end
|
137
143
|
|
144
|
+
class << self
|
145
|
+
include SupervisorHelpers::ClassMethods
|
146
|
+
end
|
147
|
+
|
138
148
|
end
|
139
149
|
end
|
140
150
|
end
|
@@ -1,6 +1,4 @@
|
|
1
|
-
require 'ecoportal/api'
|
2
1
|
require_relative 'ecoportal_api/base_model'
|
3
|
-
require_relative 'ecoportal_api/external_people'
|
4
2
|
require_relative 'ecoportal_api/external_person'
|
5
3
|
require_relative 'ecoportal_api/internal_person'
|
6
4
|
require_relative 'ecoportal_api/account_preferences'
|
@@ -1,47 +1,28 @@
|
|
1
1
|
module Ecoportal
|
2
2
|
module API
|
3
3
|
class Internal
|
4
|
-
class Preferences
|
4
|
+
class Preferences < Common::BaseModel
|
5
|
+
passthrough :kiosk_enabled, :kiosk_workflow_message, :kiosk_create_button_label,
|
6
|
+
:kiosk_create_button_help, :kiosk_return_button_label, :kiosk_return_button_help,
|
7
|
+
:kiosk_dashboard_button_label, :kiosk_dashboard_button_help
|
8
|
+
|
5
9
|
[
|
6
10
|
:show_sidebar,
|
7
11
|
:show_shortcuts,
|
8
12
|
:show_coming_soon,
|
9
13
|
:show_recently_visited_forms,
|
10
14
|
:show_tasks,
|
11
|
-
|
12
|
-
|
15
|
+
:show_task_bubbles
|
16
|
+
].map(&:to_s).each do |field|
|
13
17
|
define_method(field) do
|
14
|
-
if doc.key?(
|
15
|
-
doc[
|
18
|
+
if doc.key?(field)
|
19
|
+
doc[field]
|
16
20
|
else
|
17
21
|
true
|
18
22
|
end
|
19
23
|
end
|
20
24
|
define_method("#{field}=") do |value|
|
21
|
-
doc[
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
[
|
26
|
-
:kiosk_enabled,
|
27
|
-
:kiosk_workflow_message,
|
28
|
-
:kiosk_create_button_label,
|
29
|
-
:kiosk_create_button_help,
|
30
|
-
:kiosk_return_button_label,
|
31
|
-
:kiosk_return_button_help,
|
32
|
-
:kiosk_dashboard_button_label,
|
33
|
-
:kiosk_dashboard_button_help
|
34
|
-
].each do |field|
|
35
|
-
key = field.to_s
|
36
|
-
define_method(field) do
|
37
|
-
if doc.key?(key)
|
38
|
-
doc[key]
|
39
|
-
else
|
40
|
-
nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
define_method("#{field}=") do |value|
|
44
|
-
doc[key] = !!value
|
25
|
+
doc[field] = !!value
|
45
26
|
end
|
46
27
|
end
|
47
28
|
|
@@ -69,13 +69,15 @@ module Eco
|
|
69
69
|
|
70
70
|
def errors
|
71
71
|
entries.each_with_object([]) do |entry, arr|
|
72
|
-
if
|
73
|
-
errs
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
72
|
+
if body = status[entry].body
|
73
|
+
if errs = body["errors"]
|
74
|
+
errs.each do |msg|
|
75
|
+
arr.push({
|
76
|
+
type: klass = Eco::API::Error.get_type(msg),
|
77
|
+
err: klass.new(err_msg: msg, entry: entry, session: session),
|
78
|
+
entry: entry
|
79
|
+
})
|
80
|
+
end
|
79
81
|
end
|
80
82
|
end
|
81
83
|
end
|
@@ -69,7 +69,7 @@ module Eco
|
|
69
69
|
if session.tagtree
|
70
70
|
person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
|
71
71
|
else
|
72
|
-
tags = person.filter_tags
|
72
|
+
tags = person.filter_tags || []
|
73
73
|
person.account.default_tag = tags.first unless tags.length > 1
|
74
74
|
end
|
75
75
|
end
|
@@ -11,17 +11,18 @@ module Eco
|
|
11
11
|
supers = session.job_group("post").new("supers", usecase: usecase, type: :update, sets: :core)
|
12
12
|
leavers = session.job_group("post").new("leavers", usecase: usecase, type: :update, sets: :account)
|
13
13
|
|
14
|
-
people.
|
15
|
-
|
14
|
+
strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
|
15
|
+
pgs = session.policy_groups
|
16
|
+
|
17
|
+
people.each_with_index do |person, i|
|
18
|
+
if !entries.find(person, strict: strict_search)
|
16
19
|
leavers.add(person) do |person|
|
17
20
|
person.supervisor_id = nil
|
18
|
-
person.account = nil
|
21
|
+
person.account = nil if person.account
|
19
22
|
end
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
23
|
-
strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
|
24
|
-
pgs = session.policy_groups
|
25
26
|
|
26
27
|
if session.config.people.default_usergroup?
|
27
28
|
def_id = pgs.to_id(session.config.people.default_usergroup)
|
@@ -84,7 +85,7 @@ module Eco
|
|
84
85
|
if session.tagtree
|
85
86
|
person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
|
86
87
|
else
|
87
|
-
tags = person.filter_tags
|
88
|
+
tags = person.filter_tags || []
|
88
89
|
person.account.default_tag = tags.first unless tags.length > 1
|
89
90
|
end
|
90
91
|
end
|
@@ -30,8 +30,12 @@ module Eco
|
|
30
30
|
update = session.job_group("main").new("update", usecase: usecase, type: :update, sets: :account)
|
31
31
|
|
32
32
|
people.each_with_index do |person, i|
|
33
|
-
|
34
|
-
|
33
|
+
if session.tagtree
|
34
|
+
person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
|
35
|
+
else
|
36
|
+
tags = person.filter_tags || []
|
37
|
+
person.account.default_tag = tags.first unless tags.length > 1
|
38
|
+
end
|
35
39
|
update.add(person)
|
36
40
|
end
|
37
41
|
|
@@ -24,21 +24,31 @@ module Eco
|
|
24
24
|
CSV.open(file, "w") do |csv|
|
25
25
|
deps = {"supervisor_id" => {people: people}}
|
26
26
|
header = session.new_entry(people.first, dependencies: deps).to_hash.keys
|
27
|
+
header += ["Subordinates"]
|
28
|
+
header += ["Supervisor Name"]
|
27
29
|
header += abilities
|
28
30
|
header += ["Login Methods"] if login_providers.any_optional?
|
29
|
-
header += ["Subordinates"]
|
30
31
|
header += ["Landing Page"]
|
31
32
|
|
32
33
|
csv << header
|
33
34
|
people.each do |person|
|
34
35
|
data = session.new_entry(person, dependencies: deps).to_hash.values
|
36
|
+
|
37
|
+
data.push(person.subordinates)
|
38
|
+
super_id = person.supervisor_id
|
39
|
+
if supervisor = people.person(id: super_id, external_id: super_id)
|
40
|
+
data.push(supervisor.name)
|
41
|
+
else
|
42
|
+
data.push("")
|
43
|
+
end
|
44
|
+
|
35
45
|
person_abilities = (person.account && person.account.permissions_custom) || {}
|
36
46
|
data += abilities.map {|key| person_abilities[key] || "no access"}
|
47
|
+
|
37
48
|
if login_providers.any_optional?
|
38
49
|
logins = (person.account && person.account.login_provider_ids) || []
|
39
50
|
data.push(login_providers.to_name(logins).join("|"))
|
40
51
|
end
|
41
|
-
data.push(person.subordinates)
|
42
52
|
|
43
53
|
if person.account && landing_id = person.account.landing_page_id
|
44
54
|
data.push(landing_id)
|
@@ -47,7 +57,7 @@ module Eco
|
|
47
57
|
csv << data
|
48
58
|
end
|
49
59
|
end
|
50
|
-
|
60
|
+
exit(0)
|
51
61
|
end
|
52
62
|
end
|
53
63
|
|
@@ -12,6 +12,10 @@ module Eco
|
|
12
12
|
strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
|
13
13
|
pgs = session.policy_groups
|
14
14
|
|
15
|
+
if session.config.people.default_usergroup?
|
16
|
+
def_id = pgs.to_id(session.config.people.default_usergroup)
|
17
|
+
end
|
18
|
+
|
15
19
|
entries.each.with_index do |entry, i|
|
16
20
|
if person = people.find(entry, strict: strict_search)
|
17
21
|
|
@@ -37,6 +41,7 @@ module Eco
|
|
37
41
|
entry.set_details(person) unless options.dig(:exclude, :details)
|
38
42
|
|
39
43
|
unless options.dig(:exclude, :account)
|
44
|
+
add_account = !person.account
|
40
45
|
ini_pg_ids = person.account&.policy_group_ids || []
|
41
46
|
|
42
47
|
account_excluded = []
|
@@ -68,7 +73,7 @@ module Eco
|
|
68
73
|
if session.tagtree
|
69
74
|
person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
|
70
75
|
else
|
71
|
-
tags = person.filter_tags
|
76
|
+
tags = person.filter_tags || []
|
72
77
|
person.account.default_tag = tags.first unless tags.length > 1
|
73
78
|
end
|
74
79
|
end
|
@@ -77,7 +77,7 @@ module Eco
|
|
77
77
|
if session.tagtree
|
78
78
|
person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
|
79
79
|
else
|
80
|
-
tags = person.filter_tags
|
80
|
+
tags = person.filter_tags || []
|
81
81
|
person.account.default_tag = tags.first unless tags.length > 1
|
82
82
|
end
|
83
83
|
end
|
data/lib/eco/version.rb
CHANGED
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: 1.3.
|
4
|
+
version: 1.3.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
@@ -16,14 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: '2.1'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.1.3
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
29
|
+
version: '2.1'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.1.3
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rspec
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -33,7 +39,7 @@ dependencies:
|
|
33
39
|
version: '3'
|
34
40
|
- - ">="
|
35
41
|
- !ruby/object:Gem::Version
|
36
|
-
version: '3.
|
42
|
+
version: '3.9'
|
37
43
|
type: :development
|
38
44
|
prerelease: false
|
39
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,7 +49,7 @@ dependencies:
|
|
43
49
|
version: '3'
|
44
50
|
- - ">="
|
45
51
|
- !ruby/object:Gem::Version
|
46
|
-
version: '3.
|
52
|
+
version: '3.9'
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: rake
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,7 +113,7 @@ dependencies:
|
|
107
113
|
version: '0.5'
|
108
114
|
- - ">="
|
109
115
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.5.
|
116
|
+
version: 0.5.8
|
111
117
|
type: :runtime
|
112
118
|
prerelease: false
|
113
119
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -117,67 +123,67 @@ dependencies:
|
|
117
123
|
version: '0.5'
|
118
124
|
- - ">="
|
119
125
|
- !ruby/object:Gem::Version
|
120
|
-
version: 0.5.
|
126
|
+
version: 0.5.8
|
121
127
|
- !ruby/object:Gem::Dependency
|
122
128
|
name: aws-sdk-s3
|
123
129
|
requirement: !ruby/object:Gem::Requirement
|
124
130
|
requirements:
|
125
131
|
- - "~>"
|
126
132
|
- !ruby/object:Gem::Version
|
127
|
-
version: '1
|
133
|
+
version: '1'
|
128
134
|
- - ">="
|
129
135
|
- !ruby/object:Gem::Version
|
130
|
-
version: 1.
|
136
|
+
version: 1.64.0
|
131
137
|
type: :runtime
|
132
138
|
prerelease: false
|
133
139
|
version_requirements: !ruby/object:Gem::Requirement
|
134
140
|
requirements:
|
135
141
|
- - "~>"
|
136
142
|
- !ruby/object:Gem::Version
|
137
|
-
version: '1
|
143
|
+
version: '1'
|
138
144
|
- - ">="
|
139
145
|
- !ruby/object:Gem::Version
|
140
|
-
version: 1.
|
146
|
+
version: 1.64.0
|
141
147
|
- !ruby/object:Gem::Dependency
|
142
148
|
name: aws-sdk-ses
|
143
149
|
requirement: !ruby/object:Gem::Requirement
|
144
150
|
requirements:
|
145
|
-
- - ">="
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version: 1.14.0
|
148
151
|
- - "~>"
|
149
152
|
- !ruby/object:Gem::Version
|
150
|
-
version: '1
|
153
|
+
version: '1'
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: 1.29.0
|
151
157
|
type: :runtime
|
152
158
|
prerelease: false
|
153
159
|
version_requirements: !ruby/object:Gem::Requirement
|
154
160
|
requirements:
|
155
|
-
- - ">="
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: 1.14.0
|
158
161
|
- - "~>"
|
159
162
|
- !ruby/object:Gem::Version
|
160
|
-
version: '1
|
163
|
+
version: '1'
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 1.29.0
|
161
167
|
- !ruby/object:Gem::Dependency
|
162
168
|
name: dotenv
|
163
169
|
requirement: !ruby/object:Gem::Requirement
|
164
170
|
requirements:
|
165
171
|
- - ">="
|
166
172
|
- !ruby/object:Gem::Version
|
167
|
-
version: 2.
|
173
|
+
version: 2.7.0
|
168
174
|
- - "~>"
|
169
175
|
- !ruby/object:Gem::Version
|
170
|
-
version: '2.
|
176
|
+
version: '2.7'
|
171
177
|
type: :runtime
|
172
178
|
prerelease: false
|
173
179
|
version_requirements: !ruby/object:Gem::Requirement
|
174
180
|
requirements:
|
175
181
|
- - ">="
|
176
182
|
- !ruby/object:Gem::Version
|
177
|
-
version: 2.
|
183
|
+
version: 2.7.0
|
178
184
|
- - "~>"
|
179
185
|
- !ruby/object:Gem::Version
|
180
|
-
version: '2.
|
186
|
+
version: '2.7'
|
181
187
|
- !ruby/object:Gem::Dependency
|
182
188
|
name: net-sftp
|
183
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -249,7 +255,6 @@ files:
|
|
249
255
|
- lib/eco/api/common/version_patches/ecoportal_api.rb
|
250
256
|
- lib/eco/api/common/version_patches/ecoportal_api/account_preferences.rb
|
251
257
|
- lib/eco/api/common/version_patches/ecoportal_api/base_model.rb
|
252
|
-
- lib/eco/api/common/version_patches/ecoportal_api/external_people.rb
|
253
258
|
- lib/eco/api/common/version_patches/ecoportal_api/external_person.rb
|
254
259
|
- lib/eco/api/common/version_patches/ecoportal_api/internal_person.rb
|
255
260
|
- lib/eco/api/common/version_patches/exception.rb
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module Ecoportal
|
2
|
-
module API
|
3
|
-
class V1
|
4
|
-
class People
|
5
|
-
|
6
|
-
def job
|
7
|
-
operation = Common::BatchOperation.new("/people", person_class, logger: client.logger)
|
8
|
-
yield operation
|
9
|
-
# The batch operation is responsible for logging the output
|
10
|
-
job_id = create_job(operation)
|
11
|
-
status = wait_for_job_completion(job_id)
|
12
|
-
|
13
|
-
if status&.complete?
|
14
|
-
operation.process_response job_result(job_id, operation)
|
15
|
-
else
|
16
|
-
raise "Job `#{job_id}` not complete. Probably timeout after #{JOB_TIMEOUT + 120} seconds. Current status: #{status}"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def wait_for_job_completion(job_id)
|
23
|
-
# timeout library is evil. So we make poor-man timeout.
|
24
|
-
# https://jvns.ca/blog/2015/11/27/why-rubys-timeout-is-dangerous-and-thread-dot-raise-is-terrifying/
|
25
|
-
before = Time.now
|
26
|
-
while true
|
27
|
-
status = job_status(job_id)
|
28
|
-
break status if status.complete?
|
29
|
-
break status if Time.now >= before + (JOB_TIMEOUT + 120)
|
30
|
-
sleep(DELAY_STATUS_CHECK)
|
31
|
-
status
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|