eco-helpers 1.0.8 → 1.0.9
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/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