eco-helpers 1.0.8 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/eco/api/common/people/default_parsers.rb +1 -0
- data/lib/eco/api/common/people/entry_factory.rb +16 -5
- data/lib/eco/api/common/people/person_parser.rb +10 -4
- data/lib/eco/api/common/session/file_manager.rb +7 -1
- data/lib/eco/api/session.rb +11 -0
- data/lib/eco/api/session/config/workflow.rb +4 -3
- data/lib/eco/api/usecases/default_cases/create_case.rb +1 -2
- data/lib/eco/api/usecases/default_cases/hris_case.rb +1 -1
- data/lib/eco/api/usecases/default_cases/remove_account_case.rb +2 -2
- data/lib/eco/api/usecases/default_cases/update_case.rb +1 -1
- data/lib/eco/api/usecases/default_cases/update_details_case.rb +1 -1
- data/lib/eco/api/usecases/default_cases/upsert_case.rb +7 -4
- data/lib/eco/assets.rb +1 -1
- data/lib/eco/cli.rb +2 -2
- data/lib/eco/cli/config/default/workflow.rb +17 -4
- data/lib/eco/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2cc1dbfbff9d516658984913b6c550a5c5eba25134c2fd58252dc6ce6ca4a18
|
4
|
+
data.tar.gz: 6a9af3f7c3d8bbac1cf66c37bf5e563e2b899f63275187dc1caf0a7985ab09f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c749092b76b38487931672d4fcf38cdfbcbfc3c92445c23587c53a086c02113e3f1b65e2ecacfe3d53f231014437e0e0f93b58acf0701ebf2adc661d68eb0855
|
7
|
+
data.tar.gz: f8bc01d6781aeb0791b95015206844513d91356bf981828691f841175af225c829f3a82bd85bc9a92af54993be26218a36f41435431d8622a93f598a62cf7561
|
@@ -15,6 +15,7 @@ module Eco
|
|
15
15
|
# Select Options
|
16
16
|
select_hashes = @schema.fields.map do |fld|
|
17
17
|
if fld.type == "select"
|
18
|
+
raise "The schema selection field '#{fld.name}' is missing selection options." unless fld.options && !fld.options.empty?
|
18
19
|
options_hash = fld.options.map { |v| [v.downcase.strip, v] }.to_h
|
19
20
|
[fld.alt_id, options_hash]
|
20
21
|
end
|
@@ -19,12 +19,23 @@ module Eco
|
|
19
19
|
@logger = logger
|
20
20
|
@schema = Ecoportal::API::V1::PersonSchema.new(JSON.parse(schema.doc.to_json))
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
@source_person_parser = person_parser
|
23
|
+
|
24
|
+
@person_parser = Eco::API::Common::People::DefaultParsers.new(schema: @schema)
|
25
|
+
@person_parser = @person_parser.merge(@source_person_parser)
|
26
|
+
@person_parser_patch_version = @source_person_parser.patch_version
|
24
27
|
|
25
28
|
@attr_map = attr_map
|
26
29
|
end
|
27
30
|
|
31
|
+
def person_parser
|
32
|
+
if @person_parser_patch_version < @source_person_parser.patch_version
|
33
|
+
@person_parser.merge(@source_person_parser)
|
34
|
+
@person_parser_patch_version = @source_person_parser.patch_version
|
35
|
+
end
|
36
|
+
@person_parser
|
37
|
+
end
|
38
|
+
|
28
39
|
# key method to generate objects of `PersonEntry` that share dependencies via this `EntryFactory` environment.
|
29
40
|
# @note this method is necessary to make the factory object work as a if it was a class `PersonEntry` you can call `new` on.
|
30
41
|
# @param data [Array<Hash>] data to be parsed. The external hashed entry.
|
@@ -32,7 +43,7 @@ module Eco
|
|
32
43
|
def new(data, dependencies: {})
|
33
44
|
PersonEntry.new(
|
34
45
|
data,
|
35
|
-
person_parser:
|
46
|
+
person_parser: person_parser,
|
36
47
|
attr_map: @attr_map,
|
37
48
|
dependencies: dependencies,
|
38
49
|
logger: @logger
|
@@ -62,7 +73,7 @@ module Eco
|
|
62
73
|
if Eco::API::Common::Session::FileManager.file_exists?(file)
|
63
74
|
encoding ||= Eco::API::Common::Session::FileManager.encoding(file)
|
64
75
|
file_content = File.read(file, encoding: encoding)
|
65
|
-
arr_hash =
|
76
|
+
arr_hash = person_parser.parse(format, file_content)
|
66
77
|
else
|
67
78
|
@logger.warn("File does not exist: #{file}")
|
68
79
|
end
|
@@ -105,7 +116,7 @@ module Eco
|
|
105
116
|
end
|
106
117
|
|
107
118
|
File.open(file, "w", enconding: encoding) do |fd|
|
108
|
-
fd.write(
|
119
|
+
fd.write(person_parser.serialize(format, data_entries))
|
109
120
|
end
|
110
121
|
end
|
111
122
|
|
@@ -17,7 +17,8 @@ module Eco
|
|
17
17
|
attr_reader :schema
|
18
18
|
attr_reader :details_attrs, :all_attrs
|
19
19
|
attr_reader :defined_attrs
|
20
|
-
|
20
|
+
attr_reader :patch_version
|
21
|
+
|
21
22
|
# @example Example of usage:
|
22
23
|
# person_parser = PersonParser.new(schema: schema)
|
23
24
|
# person_parser.define_attribute("example") do |parser|
|
@@ -33,7 +34,8 @@ module Eco
|
|
33
34
|
def initialize(schema: nil)
|
34
35
|
raise "Constructor needs a PersonSchema. Given: #{schema}" if schema && !schema.is_a?(Ecoportal::API::V1::PersonSchema)
|
35
36
|
@details_attrs = []
|
36
|
-
@parsers
|
37
|
+
@parsers = {}
|
38
|
+
@patch_version = 0
|
37
39
|
|
38
40
|
if schema
|
39
41
|
@schema = Ecoportal::API::Internal::PersonSchema.new(JSON.parse(schema.doc.to_json))
|
@@ -43,6 +45,10 @@ module Eco
|
|
43
45
|
@all_attrs = CORE_ATTRS + ACCOUNT_ATTRS + @details_attrs
|
44
46
|
end
|
45
47
|
|
48
|
+
def patched!
|
49
|
+
@patch_version += 1
|
50
|
+
end
|
51
|
+
|
46
52
|
# Scopes `source_attrs` using the _**core** attributes_.
|
47
53
|
# @note use this helper to know which among your attributes are **core** ones.
|
48
54
|
# @param source_attrs [Array<String>]
|
@@ -115,6 +121,7 @@ module Eco
|
|
115
121
|
return self if !parser
|
116
122
|
raise "Expected a PersonParser object. Given #{parser}" if !parser.is_a?(PersonParser)
|
117
123
|
@parsers.merge!(parser.hash)
|
124
|
+
patched!
|
118
125
|
self
|
119
126
|
end
|
120
127
|
|
@@ -133,12 +140,11 @@ module Eco
|
|
133
140
|
msg = "The attribute '#{attr_to_str(attr)}' is not part of core, account or target schema, or does not match any type: #{@details_attrs}"
|
134
141
|
raise msg
|
135
142
|
end
|
136
|
-
# Eco::Language::Models::ParserSerializer
|
137
143
|
Eco::API::Common::People::PersonAttributeParser.new(attr, dependencies: dependencies).tap do |parser|
|
138
144
|
@parsers[attr] = parser
|
139
145
|
definition.call(parser)
|
140
146
|
end
|
141
|
-
|
147
|
+
patched!
|
142
148
|
self
|
143
149
|
end
|
144
150
|
|
@@ -50,7 +50,13 @@ module Eco
|
|
50
50
|
|
51
51
|
def load_json(filename)
|
52
52
|
content = file_content(filename)
|
53
|
-
|
53
|
+
begin
|
54
|
+
parsed = content && JSON.parse(content)
|
55
|
+
rescue JSON::ParserError => e
|
56
|
+
pp "Parsing error on file #{filename}"
|
57
|
+
raise e
|
58
|
+
end
|
59
|
+
return parsed
|
54
60
|
end
|
55
61
|
|
56
62
|
def touch(filename, modifier = :no_stamp, mode: :string)
|
data/lib/eco/api/session.rb
CHANGED
@@ -113,6 +113,17 @@ module Eco
|
|
113
113
|
self
|
114
114
|
end
|
115
115
|
|
116
|
+
# Allows to use the defined parsers
|
117
|
+
# @note the use of these method requires to know which is the expected format of `source`
|
118
|
+
# @param attr [String] type (`Symbol`) or attribute (`String`) to target a specific parser.
|
119
|
+
# @param source [Any] source value to be parsed.
|
120
|
+
def parse_attribute(attr, source)
|
121
|
+
unless parsers = @entry_factory.person_parser
|
122
|
+
raise "There are no parsers defined"
|
123
|
+
end
|
124
|
+
parsers.parse(attr, source)
|
125
|
+
end
|
126
|
+
|
116
127
|
# Builds the presets using the usergroup ids of the input.
|
117
128
|
# @note for each flag/ability it will take the highest among those mapped for the present usergroups.
|
118
129
|
# @param [Ecoportal::API::Internal::Person, Array<String>] the array should be of usegroup names or ids.
|
@@ -6,11 +6,12 @@ module Eco
|
|
6
6
|
extend Eco::API::Common::ClassHelpers
|
7
7
|
|
8
8
|
@workflow = {
|
9
|
-
|
10
|
-
|
9
|
+
options: nil,
|
10
|
+
load: {input: nil, people: {get: nil, filter: nil}, filter: nil},
|
11
|
+
usecases: nil,
|
11
12
|
launch_jobs: nil,
|
12
13
|
post_launch: {usecases: nil, launch_jobs: nil},
|
13
|
-
end:
|
14
|
+
end: nil
|
14
15
|
}
|
15
16
|
|
16
17
|
class << self
|
@@ -31,7 +31,7 @@ module Eco
|
|
31
31
|
ini_tags = person.filter_tags || []
|
32
32
|
|
33
33
|
core_attrs = ["name", "external_id", "email", "filter_tags"]
|
34
|
-
core_excluded = core_attrs.map
|
34
|
+
core_excluded = core_attrs.map.select {|attr| options.dig(:exclude, attr.to_sym)}
|
35
35
|
core_excluded.push("supervisor_id")
|
36
36
|
|
37
37
|
entry.set_core(person, exclude: core_excluded)
|
@@ -14,8 +14,8 @@ module Eco
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
@cases.define("remove-account", type: :sync) do |entries, people, session, options|
|
18
|
-
update = session.job_group("main").new("update", type: :update, sets: [:core, :account])
|
17
|
+
@cases.define("remove-account", type: :sync) do |entries, people, session, options, usecase|
|
18
|
+
update = session.job_group("main").new("update", usecase: usecase, type: :update, sets: [:core, :account])
|
19
19
|
|
20
20
|
strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
|
21
21
|
|
@@ -19,7 +19,7 @@ module Eco
|
|
19
19
|
ini_tags = person.filter_tags || []
|
20
20
|
|
21
21
|
core_attrs = ["name", "external_id", "email", "filter_tags"]
|
22
|
-
core_excluded = core_attrs.map
|
22
|
+
core_excluded = core_attrs.map.select {|attr| options.dig(:exclude, attr.to_sym)}
|
23
23
|
core_excluded.push("supervisor_id")
|
24
24
|
|
25
25
|
entry.set_core(person, exclude: core_excluded)
|
@@ -15,7 +15,7 @@ module Eco
|
|
15
15
|
if person = people.find(entry, strict: strict_search)
|
16
16
|
unless options.dig(:exclude, :core)
|
17
17
|
core_attrs = ["name", "external_id", "email", "filter_tags"]
|
18
|
-
core_excluded = core_attrs.map
|
18
|
+
core_excluded = core_attrs.map.select {|attr| options.dig(:exclude, attr.to_sym)}
|
19
19
|
core_excluded.push("supervisor_id")
|
20
20
|
|
21
21
|
entry.set_core(person, exclude: core_excluded) unless options.dig(:exclude, :core)
|
@@ -18,11 +18,14 @@ module Eco
|
|
18
18
|
person = session.new_person if create = !person
|
19
19
|
|
20
20
|
unless options.dig(:exclude, :core) && !create
|
21
|
-
ini_tags
|
21
|
+
ini_tags = person.filter_tags || []
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
core_excluded = ["supervisor_id"]
|
24
|
+
|
25
|
+
unless create
|
26
|
+
core_attrs = ["name", "external_id", "email", "filter_tags"]
|
27
|
+
core_excluded += core_attrs.map.select {|attr| options.dig(:exclude, attr.to_sym)}
|
28
|
+
end
|
26
29
|
|
27
30
|
entry.set_core(person, exclude: core_excluded)
|
28
31
|
if session.tagtree && !options.dig(:exclude, :filter_tags)
|
data/lib/eco/assets.rb
CHANGED
@@ -19,7 +19,7 @@ module Eco
|
|
19
19
|
configs[:default] ||= Eco::API::Session::Config.new(key)
|
20
20
|
unless configs.key?(key)
|
21
21
|
@active_config = key unless !update_active
|
22
|
-
configs[key]
|
22
|
+
configs[key] = configs[:default].clone(key)
|
23
23
|
end
|
24
24
|
configs[key].tap do |config|
|
25
25
|
config.active_api(key) if config.apis.defined?(key)
|
data/lib/eco/cli.rb
CHANGED
@@ -26,9 +26,9 @@ module Eco
|
|
26
26
|
|
27
27
|
def run(session:)
|
28
28
|
io = Eco::API::UseCases::BaseIO.new(session: session, options: options)
|
29
|
-
|
30
|
-
|
29
|
+
|
31
30
|
session.workflow(io: io) do |wf, io|
|
31
|
+
io = wf.run(:options, io: io)
|
32
32
|
io = wf.run(:load, io: io)
|
33
33
|
io = wf.run(:usecases, io: io)
|
34
34
|
io = wf.run(:launch_jobs, io: io)
|
@@ -1,10 +1,23 @@
|
|
1
1
|
ASSETS.cli.config do |config|
|
2
2
|
ASSETS.config.workflow do |wf|
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
io = io.new(
|
7
|
-
|
4
|
+
io = nil
|
5
|
+
wf.on(:options) do |wf_options, io|
|
6
|
+
io = io.new(options: config.options_set.process(io: io))
|
7
|
+
end
|
8
|
+
|
9
|
+
wf.for(:load) do |wf_load|
|
10
|
+
wf_load.on(:input) do |wf_input, io|
|
11
|
+
io = io.new(input: config.input.get(io: io))
|
12
|
+
end
|
13
|
+
|
14
|
+
wf_load.on(:people) do |wf_people, io|
|
15
|
+
io = io.new(people: config.people(io: io))
|
16
|
+
end
|
17
|
+
|
18
|
+
wf_load.on(:filter) do |wf_filter, io|
|
19
|
+
io = io.new(people: config.people_filters.process(io: io))
|
20
|
+
end
|
8
21
|
end
|
9
22
|
|
10
23
|
wf.before(:usecases) do |wf_cases, io|
|
data/lib/eco/version.rb
CHANGED