eco-helpers 1.5.0 → 1.5.1
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 +45 -2
- data/eco-helpers.gemspec +11 -10
- data/lib/eco/api.rb +1 -0
- data/lib/eco/api/common.rb +1 -1
- data/lib/eco/api/common/people/default_parsers.rb +4 -0
- data/lib/eco/api/common/people/default_parsers/freemium_parser.rb +30 -0
- data/lib/eco/api/common/people/default_parsers/policy_groups_parser.rb +42 -0
- data/lib/eco/api/common/people/default_parsers/send_invites_parser.rb +2 -1
- data/lib/eco/api/common/people/entry_factory.rb +8 -7
- data/lib/eco/api/common/people/person_entry_attribute_mapper.rb +2 -0
- data/lib/eco/api/common/people/person_parser.rb +1 -1
- data/lib/eco/api/common/session/base_session.rb +3 -6
- data/lib/eco/api/common/session/environment.rb +2 -23
- data/lib/eco/api/common/version_patches/ecoportal_api/internal_person.rb +9 -1
- data/lib/eco/api/microcases.rb +31 -0
- data/lib/eco/api/microcases/core_excluded.rb +20 -0
- data/lib/eco/api/microcases/fix_filter_tags.rb +22 -0
- data/lib/eco/api/microcases/set_account.rb +32 -0
- data/lib/eco/api/microcases/set_core.rb +18 -0
- data/lib/eco/api/microcases/set_default_group.rb +33 -0
- data/lib/eco/api/microcases/set_default_tag.rb +23 -0
- data/lib/eco/api/microcases/set_supervisor.rb +26 -0
- data/lib/eco/api/microcases/strict_search.rb +14 -0
- data/lib/eco/api/organization/presets_values.json +1 -0
- data/lib/eco/api/session.rb +9 -6
- data/lib/eco/api/session/batch.rb +1 -44
- data/lib/eco/api/session/config.rb +2 -2
- data/lib/eco/api/session/config/api.rb +121 -7
- data/lib/eco/api/session/config/apis.rb +24 -25
- data/lib/eco/api/usecases/default_cases/recover_db_case.rb +1 -0
- data/lib/eco/api/usecases/microed_cases/hris_case.rb +53 -0
- data/lib/eco/api/usecases/microed_cases/update_case.rb +33 -0
- data/lib/eco/api/usecases/microed_cases/update_details_case.rb +30 -0
- data/lib/eco/api/usecases/microed_cases/upsert_case.rb +36 -0
- data/lib/eco/version.rb +1 -1
- metadata +94 -53
@@ -0,0 +1,22 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class MicroCases
|
4
|
+
#self.define(:fix_filter_tags) do |entry, person, options|
|
5
|
+
|
6
|
+
# @param person [Person] the person we want to update, carrying the changes to be done.
|
7
|
+
# @param options [Hash] the options
|
8
|
+
def fix_filter_tags(person, options)
|
9
|
+
if session.tagtree
|
10
|
+
unless !person.new? && (options.dig(:exclude, :core) || options.dig(:exclude, :filter_tags))
|
11
|
+
person.filter_tags = session.tagtree.user_tags(
|
12
|
+
initial: person.original_doc["filter_tags"] || [],
|
13
|
+
final: person.filter_tags,
|
14
|
+
preserve_custom: true,
|
15
|
+
add_custom: true
|
16
|
+
)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class MicroCases
|
4
|
+
#self.define("set_account") do |entry, person, session, options|
|
5
|
+
|
6
|
+
# @param entry [PersonEntry] the input entry with the data we should set on person.
|
7
|
+
# @param person [Person] the person we want to update, carrying the changes to be done.
|
8
|
+
# @param options [Hash] the options
|
9
|
+
def set_account(entry, person, options)
|
10
|
+
unless options.dig(:exclude, :account)
|
11
|
+
ini_pg_ids = person.account&.policy_group_ids || []
|
12
|
+
|
13
|
+
account_excluded = []
|
14
|
+
if options.dig(:exclude, :policy_groups) && !person.new?
|
15
|
+
account_excluded.push("policy_group_ids")
|
16
|
+
end
|
17
|
+
|
18
|
+
entry.set_account(person, exclude: account_excluded)
|
19
|
+
|
20
|
+
session.microcases.set_default_group(entry, person, session, options)
|
21
|
+
|
22
|
+
unless options.dig(:exclude, :abilities) && !person.new?
|
23
|
+
person.account.permissions_custom = session.new_preset(person)
|
24
|
+
end
|
25
|
+
|
26
|
+
session.microcases.set_default_tag(entry, person, session, options)
|
27
|
+
person.account.send_invites = options[:send_invites] if options.key?(:send_invites)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class MicroCases
|
4
|
+
#self.define("set_core") do |entry, person, session, options, people, supers|
|
5
|
+
|
6
|
+
# @param entry [PersonEntry] the input entry with the data we should set on person.
|
7
|
+
# @param person [Person] the person we want to update, carrying the changes to be done.
|
8
|
+
# @param options [Hash] the options
|
9
|
+
def set_account(entry, person, options, people, supers_job)
|
10
|
+
unless options.dig(:exclude, :core) && !person.new?
|
11
|
+
entry.set_core(person, exclude: micro.core_excluded(person, options))
|
12
|
+
micro.fix_filter_tags(person, options)
|
13
|
+
micro.set_supervisor(entry, person, options, people, supers_job)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class MicroCases
|
4
|
+
#self.define("set_default_group") do |entry, person, session, options|
|
5
|
+
|
6
|
+
# @param entry [PersonEntry] the input entry with the data we should set on person.
|
7
|
+
# @param person [Person] the person we want to update, carrying the changes to be done.
|
8
|
+
# @param options [Hash] the options
|
9
|
+
def set_default_group(entry, person, options)
|
10
|
+
unless options.dig(:exclude, :account)
|
11
|
+
unless options.dig(:exclude, :policy_groups) && !person.new?
|
12
|
+
end_pg_ids = person.account.policy_group_ids || []
|
13
|
+
|
14
|
+
if person.account_added? && def_usergroup_id && !entry.policy_group_ids?
|
15
|
+
# on account creation, if missing policy_group_ids column in the input
|
16
|
+
# use default_usergroup, if it's defined
|
17
|
+
end_pg_ids = [def_usergroup_id]
|
18
|
+
end
|
19
|
+
|
20
|
+
person.account.policy_group_ids = end_pg_ids
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def def_usergroup_id
|
26
|
+
@def_usergroup_id ||= if session.config.people.default_usergroup?
|
27
|
+
session.policy_groups.to_id(session.config.people.default_usergroup)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class MicroCases
|
4
|
+
#self.define("set_default_tag") do |entry, person, session, options|
|
5
|
+
|
6
|
+
# @param entry [PersonEntry] the input entry with the data we should set on person.
|
7
|
+
# @param person [Person] the person we want to update, carrying the changes to be done.
|
8
|
+
# @param options [Hash] the options
|
9
|
+
def set_default_tag(entry, person, options)
|
10
|
+
unless options.dig(:exclude, :account)
|
11
|
+
unless options.dig(:exclude, :filter_tags) || entry.default_tag?
|
12
|
+
if session.tagtree
|
13
|
+
person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
|
14
|
+
else
|
15
|
+
tags = person.filter_tags || []
|
16
|
+
person.account.default_tag = tags.first unless tags.length > 1
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class MicroCases
|
4
|
+
#self.define("set_supervisor") do |entry, person, session, options, people, supers_job|
|
5
|
+
|
6
|
+
def set_supervisor(entry, person, options, people, supers_job)
|
7
|
+
# set supervisor
|
8
|
+
unless options.dig(:exclude, :core) || options.dig(:exclude, :supervisor)
|
9
|
+
if !(sup_id = entry.supervisor_id)
|
10
|
+
person.supervisor_id = nil
|
11
|
+
else
|
12
|
+
if supervisor = people.person(id: sup_id, external_id: sup_id, email: sup_id)
|
13
|
+
person.supervisor_id = supervisor.id
|
14
|
+
else
|
15
|
+
# delay setting supervisor if does not exit
|
16
|
+
supers_job.add(person) do |person|
|
17
|
+
person.supervisor_id = sup_id
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class MicroCases
|
4
|
+
#self.define("strict_search") do |session, options|
|
5
|
+
|
6
|
+
# @param options [Hash] the options
|
7
|
+
def strict_search(options)
|
8
|
+
strict_config = session.config.people.strict_search?
|
9
|
+
strict_option = !options[:search]&.key?(:strict) || options.dig(:search, :strict)
|
10
|
+
strict_config && strict_option
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
"files": [null, "download", "upload", "browse", "administrate"],
|
3
3
|
"data": [null, "view", "update", "administrate", "implement"],
|
4
4
|
"reports": [null, "view", "edit", "administrate"],
|
5
|
+
"tasks": [null, "reassign_self", "reassign", "administrate"],
|
5
6
|
"organization": [null, "view", "administrate", "implement"],
|
6
7
|
"person_core": [null, "attach", "view_people_manager", "dashboard"],
|
7
8
|
"person_core_create": [null, "create"],
|
data/lib/eco/api/session.rb
CHANGED
@@ -86,19 +86,17 @@ module Eco
|
|
86
86
|
schema = to_schema(schema) || self.schema
|
87
87
|
return @entry_factories[schema&.id] if @entry_factories.key?(schema&.id)
|
88
88
|
|
89
|
-
# TODO: check PersonEntry#to_internal and #to_external in init_attr_trackers
|
90
|
-
# => when attr_map is avoided, it doesn't work as it should
|
91
89
|
mappings = []
|
92
90
|
if map_file = config.people.fields_mapper
|
93
91
|
mappings = map_file ? file_manager.load_json(map_file) : []
|
94
92
|
end
|
95
93
|
|
96
|
-
@entry_factories[schema&.id] = Eco::API::Common::People::EntryFactory.new(
|
94
|
+
@entry_factories[schema&.id] = Eco::API::Common::People::EntryFactory.new(
|
95
|
+
enviro,
|
97
96
|
schema: schema,
|
98
97
|
person_parser: config.people.parser,
|
99
|
-
attr_map: Eco::Data::Mapper.new(mappings)
|
100
|
-
|
101
|
-
})
|
98
|
+
attr_map: Eco::Data::Mapper.new(mappings)
|
99
|
+
)
|
102
100
|
end
|
103
101
|
|
104
102
|
# Helper to obtain a PersonFactory
|
@@ -197,6 +195,11 @@ module Eco
|
|
197
195
|
end
|
198
196
|
end
|
199
197
|
|
198
|
+
# shortcut to create a job of certain type within a group
|
199
|
+
def new_job(group, name, type, usecase, sets = [:core, :details, :account])
|
200
|
+
job_group(group).new(name, usecase: usecase, type: type, sets: sets)
|
201
|
+
end
|
202
|
+
|
200
203
|
def jobs_launch(simulate: false)
|
201
204
|
job_groups.launch(simulate: simulate)
|
202
205
|
end
|
@@ -92,50 +92,7 @@ module Eco
|
|
92
92
|
params = {per_page: DEFAULT_BATCH_BLOCK}.merge(params)
|
93
93
|
client = people_api.client
|
94
94
|
|
95
|
-
|
96
|
-
page = params[:page] || 1
|
97
|
-
|
98
|
-
people = []; total_pages = nil
|
99
|
-
cursor_id = nil
|
100
|
-
loop do
|
101
|
-
params.merge!(cursor_id: cursor_id) unless !cursor_id
|
102
|
-
people_res, response = client_get(client, params: params.merge(page: page), silent: silent)
|
103
|
-
people += people_res
|
104
|
-
|
105
|
-
total_iterations ||= response.body["total_pages"]
|
106
|
-
no_pages = !response.body["total_pages"]
|
107
|
-
total_results ||= response.body["total_results"]
|
108
|
-
|
109
|
-
if !total_iterations
|
110
|
-
total_iterations ||= (total_results.to_f / params[:per_page]).ceil
|
111
|
-
end
|
112
|
-
|
113
|
-
msg = "iteration number: #{page}/#{total_iterations}, got num people #{people_res.length}, with total #{people.length} people got"
|
114
|
-
msg = "search(q=#{params[:q]}) " + msg if params.key?(:q)
|
115
|
-
logger.info(msg) unless silent
|
116
|
-
|
117
|
-
iterate = (no_pages && cursor_id = response.body["cursor_id"]) || (looping && page < total_iterations)
|
118
|
-
break unless iterate
|
119
|
-
page += 1
|
120
|
-
end
|
121
|
-
|
122
|
-
return people
|
123
|
-
end
|
124
|
-
|
125
|
-
def client_get(client, params:, silent: false)
|
126
|
-
response = client.get("/people", params: params)
|
127
|
-
unless response.success?
|
128
|
-
msg = "Request failed - params: #{params}"
|
129
|
-
msg += "\n Error message: - Status #{response.status}: #{response.body}"
|
130
|
-
fatal msg
|
131
|
-
end
|
132
|
-
people = []
|
133
|
-
response.body["results"].each do |person_hash|
|
134
|
-
person = Ecoportal::API::Internal::Person.new(person_hash)
|
135
|
-
yield person if block_given?
|
136
|
-
people.push(person)
|
137
|
-
end
|
138
|
-
[people, response]
|
95
|
+
return people_api.get_all(params: params, silent: silent)
|
139
96
|
end
|
140
97
|
|
141
98
|
def batch_from(data, method:, params: {}, silent: false)
|
@@ -4,19 +4,95 @@ module Eco
|
|
4
4
|
class Config
|
5
5
|
class Api < Hash
|
6
6
|
|
7
|
-
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def to_version(str)
|
10
|
+
case str.to_sym
|
11
|
+
when :external, :v1
|
12
|
+
:v1
|
13
|
+
when :v2, :oozes
|
14
|
+
:v2
|
15
|
+
else # :internal, :v0
|
16
|
+
:v0
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def api_class(version = :v0)
|
21
|
+
case to_version(version)
|
22
|
+
when :v0
|
23
|
+
Ecoportal::API::Internal
|
24
|
+
when :v1
|
25
|
+
Ecoportal::API::V1
|
26
|
+
when :v2
|
27
|
+
Ecoportal::API::V2
|
28
|
+
else
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(name, key:, host:, version:, mode: :local, root:, user_key: nil, external_key: nil)
|
8
35
|
super(nil)
|
9
36
|
@root = root
|
10
|
-
|
11
|
-
self["
|
12
|
-
self["
|
13
|
-
self["
|
37
|
+
@apis = {}
|
38
|
+
self["name"] = name
|
39
|
+
self["key"] = key
|
40
|
+
self["host"] = host
|
41
|
+
self["version"] = version
|
42
|
+
self["mode"] = mode
|
43
|
+
self["user_key"] = user_key
|
44
|
+
self["external_key"] = external_key
|
45
|
+
end
|
46
|
+
|
47
|
+
def config
|
48
|
+
@root.config
|
49
|
+
end
|
50
|
+
|
51
|
+
def api(version: nil, logger: nil)
|
52
|
+
version = version ? version : self.version
|
53
|
+
@logger = logger if logger
|
54
|
+
|
55
|
+
if (current = get(version)) && self.logger.class == current.logger.class
|
56
|
+
return current
|
57
|
+
end
|
58
|
+
|
59
|
+
unless api_params?(version)
|
60
|
+
raise "The api configuration for '#{name}' is missing data for the api version '#{self.version(version)}'"
|
61
|
+
end
|
62
|
+
|
63
|
+
new_api(version).tap do |pi|
|
64
|
+
set(version, pi)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def set(version, api)
|
69
|
+
@apis[self.version(version)] = api
|
70
|
+
end
|
71
|
+
|
72
|
+
def get(version)
|
73
|
+
@apis[self.version(version)]
|
74
|
+
end
|
75
|
+
|
76
|
+
def name
|
77
|
+
self["name"]
|
14
78
|
end
|
15
79
|
|
16
80
|
def key
|
17
81
|
self["key"]
|
18
82
|
end
|
19
83
|
|
84
|
+
def user_key
|
85
|
+
self["user_key"] || @root.default_user_key
|
86
|
+
end
|
87
|
+
|
88
|
+
def external_key
|
89
|
+
self["external_key"] || ([:v1, :v2].include?(version) && key)
|
90
|
+
end
|
91
|
+
|
92
|
+
def internal_key
|
93
|
+
(version == :v0) && self["key"]
|
94
|
+
end
|
95
|
+
|
20
96
|
def host
|
21
97
|
self["host"]
|
22
98
|
end
|
@@ -37,10 +113,48 @@ module Eco
|
|
37
113
|
!local?
|
38
114
|
end
|
39
115
|
|
40
|
-
def version
|
41
|
-
self["version"]
|
116
|
+
def version(value = nil)
|
117
|
+
self.class.to_version(value || self["version"])
|
42
118
|
end
|
43
119
|
|
120
|
+
def logger
|
121
|
+
@logger ||= ::Logger.new(IO::NULL)
|
122
|
+
log_connection? ? @logger : ::Logger.new(IO::NULL)
|
123
|
+
end
|
124
|
+
|
125
|
+
private
|
126
|
+
|
127
|
+
def new_api(version)
|
128
|
+
klass = self.class.api_class(version)
|
129
|
+
case self.version(version)
|
130
|
+
when :v0
|
131
|
+
klass.new(internal_key, host: host, logger: logger)
|
132
|
+
when :v1
|
133
|
+
klass.new(external_key, host: host, logger: logger)
|
134
|
+
when :v2
|
135
|
+
klass.new(user_key: user_key, org_key: external_key, logger: logger)
|
136
|
+
end.tap do |pi|
|
137
|
+
unless log_connection? || !pi
|
138
|
+
@logger.info("Created api#{self.version(version)} connection on '#{name}' enviro, pointing to '#{host}' in '#{mode}' mode")
|
139
|
+
pi.logger.level = ::Logger::UNKNOWN
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def api_params?(version)
|
145
|
+
case self.class.to_version(version)
|
146
|
+
when :v0
|
147
|
+
internal_key && host
|
148
|
+
when :v1
|
149
|
+
external_key && host
|
150
|
+
when :v2
|
151
|
+
external_key && user_key
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def log_connection?
|
156
|
+
config.logger.log_connection?
|
157
|
+
end
|
44
158
|
|
45
159
|
end
|
46
160
|
end
|
@@ -26,17 +26,24 @@ module Eco
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def add(name, key:, host:, version: :internal, mode: :local)
|
29
|
+
def add(name, key:, host:, version: :internal, mode: :local, user_key: nil, external_key: nil)
|
30
30
|
apis[name] = Session::Config::Api.new(
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
name,
|
32
|
+
key: key,
|
33
|
+
host: host,
|
34
|
+
version: version,
|
35
|
+
mode: mode,
|
36
|
+
root: self,
|
37
|
+
user_key: user_key,
|
38
|
+
external_key: external_key
|
36
39
|
)
|
37
40
|
self
|
38
41
|
end
|
39
42
|
|
43
|
+
def active_api
|
44
|
+
self["active-api"]
|
45
|
+
end
|
46
|
+
|
40
47
|
def active_name=(name)
|
41
48
|
raise "'#{name}' Api environment not defined" if !apis[name]
|
42
49
|
self["active-name"] = name
|
@@ -53,34 +60,26 @@ module Eco
|
|
53
60
|
active_name
|
54
61
|
end
|
55
62
|
|
56
|
-
def active_api
|
57
|
-
self["active-api"]
|
58
|
-
end
|
59
|
-
|
60
63
|
def service_up?
|
61
|
-
|
62
|
-
@api_test ||= api_klass.new("foobar", host: active_api.host, logger: ::Logger.new(IO::NULL))
|
64
|
+
@api_test ||= Session::Config::Api.api_class(active_api.version).new("foobar", host: active_api.host, logger: ::Logger.new(IO::NULL))
|
63
65
|
status = @api_test.client.get("/policy_groups").status
|
64
66
|
# 401 Unauthorized "Permission denied. API key may be invalid."
|
65
67
|
status == 401
|
66
68
|
end
|
67
69
|
|
68
|
-
def api(logger = ::Logger.new(IO::NULL),
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
version
|
73
|
-
|
74
|
-
|
75
|
-
api_klass = (version == :external)? Ecoportal::API::External : Ecoportal::API::Internal
|
70
|
+
def api(logger = ::Logger.new(IO::NULL), version: nil)
|
71
|
+
unless active_api
|
72
|
+
raise "There's no 'active_api'. Use apis.active_name='api_enviro_name' to set the active api"
|
73
|
+
end
|
74
|
+
active_api.api(version: version, logger: logger)
|
75
|
+
end
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
@api
|
77
|
+
def default_user_key=(key)
|
78
|
+
self["user_key"] = key
|
80
79
|
end
|
81
80
|
|
82
|
-
def
|
83
|
-
|
81
|
+
def default_user_key
|
82
|
+
self["user_key"]
|
84
83
|
end
|
85
84
|
|
86
85
|
end
|