eco-helpers 1.5.13 → 2.0.4

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +71 -0
  3. data/eco-helpers.gemspec +31 -29
  4. data/lib/eco/api.rb +1 -1
  5. data/lib/eco/api/common/class_helpers.rb +45 -1
  6. data/lib/eco/api/common/loaders/error_handler.rb +2 -0
  7. data/lib/eco/api/common/loaders/parser.rb +4 -0
  8. data/lib/eco/api/common/loaders/use_case.rb +2 -0
  9. data/lib/eco/api/common/people/person_entry.rb +15 -3
  10. data/lib/eco/api/common/people/person_parser.rb +10 -3
  11. data/lib/eco/api/common/session/logger.rb +9 -1
  12. data/lib/eco/api/common/session/logger/cache.rb +91 -0
  13. data/lib/eco/api/common/session/logger/log.rb +48 -0
  14. data/lib/eco/api/common/version_patches/ecoportal_api/external_person.rb +9 -0
  15. data/lib/eco/api/microcases/people_cache.rb +7 -0
  16. data/lib/eco/api/microcases/people_load.rb +29 -21
  17. data/lib/eco/api/microcases/people_refresh.rb +6 -0
  18. data/lib/eco/api/microcases/people_search.rb +33 -8
  19. data/lib/eco/api/policies.rb +1 -0
  20. data/lib/eco/api/policies/default_policies.rb +12 -0
  21. data/lib/eco/api/policies/default_policies/99_user_access_policy.rb +88 -0
  22. data/lib/eco/api/session.rb +13 -0
  23. data/lib/eco/api/session/batch.rb +0 -3
  24. data/lib/eco/api/session/batch/job.rb +17 -7
  25. data/lib/eco/api/session/config/workflow.rb +1 -0
  26. data/lib/eco/api/usecases.rb +1 -0
  27. data/lib/eco/api/usecases/ooze_samples.rb +11 -0
  28. data/lib/eco/api/usecases/ooze_samples/ooze_update_case.rb +131 -0
  29. data/lib/eco/version.rb +1 -1
  30. metadata +42 -47
  31. data/lib/eco/api/usecases/backup/append_usergroups_case.rb +0 -36
  32. data/lib/eco/api/usecases/backup/create_case.rb +0 -104
  33. data/lib/eco/api/usecases/backup/create_details_case.rb +0 -31
  34. data/lib/eco/api/usecases/backup/create_details_with_supervisor_case.rb +0 -48
  35. data/lib/eco/api/usecases/backup/hris_case.rb +0 -124
  36. data/lib/eco/api/usecases/backup/set_default_tag_case.rb +0 -49
  37. data/lib/eco/api/usecases/backup/set_supervisor_case.rb +0 -41
  38. data/lib/eco/api/usecases/backup/transfer_account_case.rb +0 -90
  39. data/lib/eco/api/usecases/backup/update_case.rb +0 -112
  40. data/lib/eco/api/usecases/backup/update_details_case.rb +0 -64
  41. data/lib/eco/api/usecases/backup/upsert_case.rb +0 -114
@@ -1,64 +0,0 @@
1
- module Eco
2
- module API
3
- class UseCases
4
- class DefaultCases
5
- class UpdateDetailsCase < DefaultCase
6
-
7
- def process
8
- @cases.define("update-details", type: :sync) do |entries, people, session, options, usecase|
9
- job = session.job_group("main").new("update", usecase: usecase, type: :update, sets: [:core, :details])
10
- supers = session.job_group("post").new("supers", usecase: usecase, type: :update, sets: :core)
11
-
12
- strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
13
-
14
- entries.each.with_index do |entry, i|
15
- if person = people.find(entry, strict: strict_search)
16
- unless options.dig(:exclude, :core)
17
- core_attrs = ["name", "external_id", "email", "filter_tags"]
18
- core_excluded = core_attrs.map.select {|attr| options.dig(:exclude, attr.to_sym)}
19
- core_excluded.push("supervisor_id")
20
-
21
- entry.set_core(person, exclude: core_excluded) unless options.dig(:exclude, :core)
22
-
23
- if session.tagtree && !options.dig(:exclude, :filter_tags)
24
- person.filter_tags = session.tagtree.user_tags(
25
- initial: ini_tags,
26
- final: person.filter_tags,
27
- preserve_custom: true,
28
- add_custom: true
29
- )
30
- end
31
- end
32
-
33
- entry.set_details(person)
34
-
35
- job.add(person)
36
-
37
- # set supervisor
38
- unless options.dig(:exclude, :core) || options.dig(:exclude, :supervisor)
39
- if !(sup_id = entry.supervisor_id)
40
- person.supervisor_id = nil
41
- else
42
- if supervisor = people.person(id: sup_id, external_id: sup_id, email: sup_id)
43
- person.supervisor_id = supervisor.id
44
- else
45
- # delay setting supervisor if does not exit
46
- supers.add(person) do |person|
47
- person.supervisor_id = sup_id
48
- end
49
- end
50
- end
51
- end
52
-
53
- else
54
- session.logger.error("This person does not exist: #{entry.to_s(:identify)}")
55
- end
56
- end
57
- end
58
- end
59
-
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,114 +0,0 @@
1
- module Eco
2
- module API
3
- class UseCases
4
- class DefaultCases
5
- class UpsertCase < DefaultCase
6
-
7
- def process
8
- @cases.define("upsert", type: :sync) do |entries, people, session, options, usecase|
9
- creation = session.job_group("main").new("create", usecase: usecase, type: :create, sets: [:core, :details, :account])
10
- update = session.job_group("main").new("update", usecase: usecase, type: :update, sets: [:core, :details, :account])
11
- supers = session.job_group("post").new("supers", usecase: usecase, type: :update, sets: :core)
12
-
13
- strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
14
- pgs = session.policy_groups
15
-
16
- if session.config.people.default_usergroup?
17
- def_id = pgs.to_id(session.config.people.default_usergroup)
18
- end
19
-
20
- entries.each_with_index do |entry, i|
21
- person = people.find(entry, strict: strict_search)
22
- person = session.new_person if create = !person
23
-
24
- unless options.dig(:exclude, :core) && !create
25
- ini_tags = person.filter_tags || []
26
-
27
- core_excluded = ["supervisor_id"]
28
-
29
- unless create
30
- core_attrs = ["name", "external_id", "email", "filter_tags"]
31
- core_excluded += core_attrs.map.select {|attr| options.dig(:exclude, attr.to_sym)}
32
- end
33
-
34
- entry.set_core(person, exclude: core_excluded)
35
- if session.tagtree && !options.dig(:exclude, :filter_tags)
36
- person.filter_tags = session.tagtree.user_tags(
37
- initial: ini_tags,
38
- final: person.filter_tags,
39
- preserve_custom: true,
40
- add_custom: true
41
- )
42
- end
43
- end
44
-
45
- entry.set_details(person) unless options.dig(:exclude, :details)
46
-
47
- unless options.dig(:exclude, :account)
48
- add_account = !person.account
49
- ini_pg_ids = person.account&.policy_group_ids || []
50
-
51
- account_excluded = []
52
- account_excluded.push("policy_group_ids") if options.dig(:exclude, :policy_groups) && !create
53
-
54
- entry.set_account(person, exclude: account_excluded)
55
-
56
- person.account.send_invites = options[:send_invites] if options.key?(:send_invites)
57
-
58
- unless options.dig(:exclude, :policy_groups) && !create
59
- end_pg_ids = person.account.policy_group_ids || []
60
-
61
- if add_account && def_id && !entry.policy_group_ids?
62
- # on account creation, if missing policy_group_ids column in the input
63
- # use default_usergroup, if it's defined
64
- end_pg_ids = [def_id]
65
- end
66
-
67
- # avoid false updates by preserving the original order
68
- person.account.policy_group_ids = pgs.user_pg_ids(
69
- initial: ini_pg_ids,
70
- final: end_pg_ids
71
- )
72
- end
73
-
74
- person.account.permissions_custom = session.new_preset(person) unless !create && options.dig(:exclude, :abilities)
75
-
76
- unless options.dig(:exclude, :filter_tags) || entry.default_tag?
77
- if session.tagtree
78
- person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
79
- else
80
- tags = person.filter_tags || []
81
- person.account.default_tag = tags.first unless tags.length > 1
82
- end
83
- end
84
-
85
- end
86
-
87
- creation.add(person) if create
88
- update.add(person) unless create
89
-
90
- # set supervisor
91
- unless options.dig(:exclude, :core) || options.dig(:exclude, :supervisor)
92
- if !(sup_id = entry.supervisor_id)
93
- person.supervisor_id = nil
94
- else
95
- if supervisor = people.person(id: sup_id, external_id: sup_id, email: sup_id)
96
- person.supervisor_id = supervisor.id
97
- else
98
- # delay setting supervisor if does not exit
99
- supers.add(person) do |person|
100
- person.supervisor_id = sup_id
101
- end
102
- end
103
- end
104
- end
105
-
106
- end
107
- end
108
- end
109
-
110
- end
111
- end
112
- end
113
- end
114
- end