eco-helpers 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +3 -0
  4. data/README.md +20 -0
  5. data/eco-helpers.gemspec +34 -0
  6. data/lib/eco-helpers.rb +15 -0
  7. data/lib/eco/api.rb +13 -0
  8. data/lib/eco/api/common.rb +10 -0
  9. data/lib/eco/api/common/people.rb +17 -0
  10. data/lib/eco/api/common/people/base_parser.rb +16 -0
  11. data/lib/eco/api/common/people/default_parsers.rb +40 -0
  12. data/lib/eco/api/common/people/default_parsers/boolean_parser.rb +28 -0
  13. data/lib/eco/api/common/people/default_parsers/date_parser.rb +33 -0
  14. data/lib/eco/api/common/people/default_parsers/multi_parser.rb +33 -0
  15. data/lib/eco/api/common/people/default_parsers/numeric_parser.rb +23 -0
  16. data/lib/eco/api/common/people/default_parsers/select_parser.rb +29 -0
  17. data/lib/eco/api/common/people/entries.rb +120 -0
  18. data/lib/eco/api/common/people/person_entry.rb +380 -0
  19. data/lib/eco/api/common/people/person_factory.rb +114 -0
  20. data/lib/eco/api/common/people/person_modifier.rb +62 -0
  21. data/lib/eco/api/common/people/person_parser.rb +140 -0
  22. data/lib/eco/api/common/people/types.rb +47 -0
  23. data/lib/eco/api/common/session.rb +15 -0
  24. data/lib/eco/api/common/session/base_session.rb +46 -0
  25. data/lib/eco/api/common/session/environment.rb +47 -0
  26. data/lib/eco/api/common/session/file_manager.rb +90 -0
  27. data/lib/eco/api/common/session/logger.rb +105 -0
  28. data/lib/eco/api/common/session/mailer.rb +92 -0
  29. data/lib/eco/api/common/session/s3_uploader.rb +110 -0
  30. data/lib/eco/api/common/version_patches.rb +11 -0
  31. data/lib/eco/api/common/version_patches/external_person.rb +11 -0
  32. data/lib/eco/api/eco_faker.rb +59 -0
  33. data/lib/eco/api/organization.rb +13 -0
  34. data/lib/eco/api/organization/account.rb +23 -0
  35. data/lib/eco/api/organization/people.rb +118 -0
  36. data/lib/eco/api/organization/policy_groups.rb +51 -0
  37. data/lib/eco/api/organization/preferences.rb +28 -0
  38. data/lib/eco/api/organization/preferences_reference.json +23 -0
  39. data/lib/eco/api/organization/presets.rb +138 -0
  40. data/lib/eco/api/organization/presets_backup.rb +220 -0
  41. data/lib/eco/api/organization/presets_values.json +10 -0
  42. data/lib/eco/api/organization/tag_tree.rb +134 -0
  43. data/lib/eco/api/organization_old.rb +73 -0
  44. data/lib/eco/api/session.rb +180 -0
  45. data/lib/eco/api/session/batch.rb +132 -0
  46. data/lib/eco/api/session/batch_job.rb +152 -0
  47. data/lib/eco/api/session/batch_jobs.rb +131 -0
  48. data/lib/eco/api/session/batch_status.rb +138 -0
  49. data/lib/eco/api/session/task.rb +92 -0
  50. data/lib/eco/api/session_config.rb +179 -0
  51. data/lib/eco/api/session_config/api.rb +47 -0
  52. data/lib/eco/api/session_config/apis.rb +78 -0
  53. data/lib/eco/api/session_config/files.rb +30 -0
  54. data/lib/eco/api/session_config/logger.rb +54 -0
  55. data/lib/eco/api/session_config/mailer.rb +65 -0
  56. data/lib/eco/api/session_config/people.rb +89 -0
  57. data/lib/eco/api/session_config/s3_bucket.rb +62 -0
  58. data/lib/eco/api/session_config/use_cases.rb +30 -0
  59. data/lib/eco/api/usecases.rb +12 -0
  60. data/lib/eco/api/usecases/base_case.rb +14 -0
  61. data/lib/eco/api/usecases/case_data.rb +13 -0
  62. data/lib/eco/api/usecases/default_cases.rb +53 -0
  63. data/lib/eco/api/usecases/default_cases/change_email_case.rb +47 -0
  64. data/lib/eco/api/usecases/default_cases/create_details_case.rb +29 -0
  65. data/lib/eco/api/usecases/default_cases/create_details_with_supervisor_case.rb +49 -0
  66. data/lib/eco/api/usecases/default_cases/delete_case.rb +20 -0
  67. data/lib/eco/api/usecases/default_cases/email_as_id_case.rb +24 -0
  68. data/lib/eco/api/usecases/default_cases/hris_case.rb +67 -0
  69. data/lib/eco/api/usecases/default_cases/new_email_case.rb +26 -0
  70. data/lib/eco/api/usecases/default_cases/new_id_case.rb +26 -0
  71. data/lib/eco/api/usecases/default_cases/refresh_presets.rb +25 -0
  72. data/lib/eco/api/usecases/default_cases/reinvite_case.rb +22 -0
  73. data/lib/eco/api/usecases/default_cases/remove_account_case.rb +36 -0
  74. data/lib/eco/api/usecases/default_cases/reset_landing_page_case.rb +24 -0
  75. data/lib/eco/api/usecases/default_cases/set_default_tag_case.rb +44 -0
  76. data/lib/eco/api/usecases/default_cases/set_supervisor_case.rb +39 -0
  77. data/lib/eco/api/usecases/default_cases/to_csv_case.rb +36 -0
  78. data/lib/eco/api/usecases/default_cases/update_details_case.rb +30 -0
  79. data/lib/eco/api/usecases/default_cases/upsert_account_case.rb +35 -0
  80. data/lib/eco/api/usecases/use_case.rb +177 -0
  81. data/lib/eco/api/usecases/use_group.rb +104 -0
  82. data/lib/eco/cli.rb +9 -0
  83. data/lib/eco/cli/input.rb +109 -0
  84. data/lib/eco/cli/input_multi.rb +137 -0
  85. data/lib/eco/cli/root.rb +8 -0
  86. data/lib/eco/cli/session.rb +9 -0
  87. data/lib/eco/cli/session/batch.rb +9 -0
  88. data/lib/eco/common.rb +7 -0
  89. data/lib/eco/common/base_cli.rb +116 -0
  90. data/lib/eco/common/language.rb +9 -0
  91. data/lib/eco/data.rb +9 -0
  92. data/lib/eco/data/crypto.rb +7 -0
  93. data/lib/eco/data/crypto/encryption.rb +318 -0
  94. data/lib/eco/data/files.rb +10 -0
  95. data/lib/eco/data/files/directory.rb +93 -0
  96. data/lib/eco/data/files/file_pattern.rb +32 -0
  97. data/lib/eco/data/files/helpers.rb +90 -0
  98. data/lib/eco/data/mapper.rb +54 -0
  99. data/lib/eco/data/random.rb +10 -0
  100. data/lib/eco/data/random/distribution.rb +133 -0
  101. data/lib/eco/data/random/fake.rb +320 -0
  102. data/lib/eco/data/random/values.rb +80 -0
  103. data/lib/eco/language.rb +12 -0
  104. data/lib/eco/language/curry.rb +28 -0
  105. data/lib/eco/language/hash_transform.rb +68 -0
  106. data/lib/eco/language/hash_transform_modifier.rb +114 -0
  107. data/lib/eco/language/match.rb +30 -0
  108. data/lib/eco/language/match_modifier.rb +190 -0
  109. data/lib/eco/language/models.rb +11 -0
  110. data/lib/eco/language/models/attribute_parser.rb +38 -0
  111. data/lib/eco/language/models/collection.rb +181 -0
  112. data/lib/eco/language/models/modifier.rb +68 -0
  113. data/lib/eco/language/models/wrap.rb +114 -0
  114. data/lib/eco/language/values_at.rb +159 -0
  115. data/lib/eco/lexic/dictionary.rb +33 -0
  116. data/lib/eco/lexic/dictionary/dictionary.txt +355484 -0
  117. data/lib/eco/lexic/dictionary/tags.json +38 -0
  118. data/lib/eco/scripting.rb +30 -0
  119. data/lib/eco/scripting/README.md +11 -0
  120. data/lib/eco/scripting/arguments.rb +40 -0
  121. data/lib/eco/tester.rb +97 -0
  122. data/lib/eco/version.rb +3 -0
  123. metadata +325 -0
@@ -0,0 +1,89 @@
1
+ module Eco
2
+ module API
3
+ class SessionConfig
4
+ class People < Hash
5
+
6
+ def initialize(root:)
7
+ super(nil)
8
+ @root = root
9
+ end
10
+
11
+ def cache=(file)
12
+ self["cache"] = file
13
+ end
14
+
15
+ def cache
16
+ self["cache"]
17
+ end
18
+
19
+ # api queried logs
20
+ def requests_folder=(folder)
21
+ self["requests_folder"] = folder
22
+ end
23
+
24
+ def requests_folder
25
+ self["requests_folder"]
26
+ end
27
+
28
+ # people to exclude from update feeds
29
+ def discarded_file=(file)
30
+ self["discarded_file"] = file
31
+ end
32
+
33
+ def discarded_file
34
+ self["discarded_file"]
35
+ end
36
+
37
+ # internal-external fields map
38
+ def fields_mapper=(file)
39
+ self["fields_mapper"] = file
40
+ end
41
+
42
+ def fields_mapper
43
+ self["fields_mapper"]
44
+ end
45
+
46
+ # person model
47
+ def default_schema=(name)
48
+ self["default_schema"] = name
49
+ end
50
+
51
+ def default_schema
52
+ self["default_schema"]
53
+ end
54
+
55
+ def presets_custom=(file)
56
+ self["presets_custom"] = file
57
+ end
58
+
59
+ def presets_custom
60
+ self["presets_custom"]
61
+ end
62
+
63
+ def presets_map=(file)
64
+ self["presets_map"] = file
65
+ end
66
+
67
+ def presets_map
68
+ self["presets_map"]
69
+ end
70
+
71
+ # CUSTOM PERSON PARSERS
72
+ def person_parser(format: :csv)
73
+ self["parsers"] ||= Eco::API::Common::People::PersonParser.new
74
+ new_parsers = Eco::API::Common::People::PersonParser.new
75
+
76
+ yield(new_parsers, self)
77
+
78
+ parsers = self["parsers"][format]
79
+ self["parsers"][format] = parsers ? parsers.merge(new_parsers) : new_parsers
80
+ end
81
+
82
+ def parser(format: :csv)
83
+ self.dig("parsers", format)
84
+ end
85
+
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,62 @@
1
+ module Eco
2
+ module API
3
+ class SessionConfig
4
+ class S3Bucket < Hash
5
+
6
+ def initialize(root:)
7
+ super(nil)
8
+ @root = root
9
+ end
10
+
11
+ def name=(value)
12
+ self["name"] = value
13
+ end
14
+
15
+ def name
16
+ self["name"]
17
+ end
18
+
19
+ def prefix=(value)
20
+ self["prefix"] = value
21
+ end
22
+
23
+ def prefix
24
+ self["prefix"]
25
+ end
26
+
27
+ def access_key_id=(key)
28
+ self["access_key_id"] = key
29
+ end
30
+
31
+ def access_key_id
32
+ self["access_key_id"]
33
+ end
34
+
35
+ def secret_access_key=(key)
36
+ self["secret_access_key"] = key
37
+ end
38
+
39
+ def secret_access_key
40
+ self["secret_access_key"]
41
+ end
42
+
43
+ def region=(region)
44
+ self["region"] = region
45
+ end
46
+
47
+ def region
48
+ self["region"]
49
+ end
50
+
51
+ def target_directories=(value)
52
+ self["target_directories"] = [value].flatten
53
+ end
54
+
55
+ def target_directories
56
+ self["target_directories"]
57
+ end
58
+
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,30 @@
1
+ module Eco
2
+ module API
3
+ class SessionConfig
4
+ class UseCases < Hash
5
+
6
+ def initialize(root:)
7
+ super(nil)
8
+ @root = root
9
+ end
10
+
11
+ # CUSTOM USE CASES
12
+ def add
13
+ self["use_group"] ||= Eco::API::UseCases::UseGroup.new
14
+ new_group = Eco::API::UseCases::UseGroup.new
15
+
16
+ yield(new_group, self)
17
+
18
+ group = self["use_group"]
19
+ group = group ? group.merge(new_group) : group
20
+ self["use_group"] = group
21
+ end
22
+
23
+ def use_group
24
+ self["use_group"]
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,12 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ end
5
+ end
6
+ end
7
+
8
+ #require_relative 'usecases/case_data'
9
+ require_relative 'usecases/base_case'
10
+ require_relative 'usecases/use_case'
11
+ require_relative 'usecases/use_group'
12
+ require_relative 'usecases/default_cases'
@@ -0,0 +1,14 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ class BaseCase
5
+ def initialize(cases, **options)
6
+ @cases = cases
7
+ @options = options
8
+ end
9
+
10
+ def process; end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ class UseData
5
+ attr_reader :usecase, :data
6
+ def initialize(usecase:, data:)
7
+ @case = usecase
8
+ @data = data
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,53 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ class DefaultCases < UseGroup
5
+
6
+ def initialize(*args)
7
+ super(*args)
8
+ define_defaults
9
+ end
10
+
11
+ private
12
+
13
+ def define_defaults
14
+ ResetLandingPageCase.new(self).process
15
+ ToCsvCase.new(self).process
16
+ EmailAsIdCase.new(self).process
17
+ NewIdCase.new(self).process
18
+ NewEmailCase.new(self).process
19
+ SetSupervisorCase.new(self).process
20
+ UpdateDetailsCase.new(self).process
21
+ CreateDetailsCase.new(self).process
22
+ CreateDetailsWithSupervisorCase.new(self).process
23
+ ReinviteCase.new(self).process
24
+ DeleteCase.new(self).process
25
+ RemoveAccountCase.new(self).process
26
+ RefreshPresets.new(self).process
27
+ ChangeEMailCase.new(self).process
28
+ SetDefaultTagCase.new(self).process
29
+ UpsertAccountCase.new(self).process
30
+ HrisCase.new(self).process
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ require_relative 'default_cases/reset_landing_page_case'
38
+ require_relative 'default_cases/to_csv_case'
39
+ require_relative 'default_cases/email_as_id_case'
40
+ require_relative 'default_cases/new_id_case'
41
+ require_relative 'default_cases/new_email_case'
42
+ require_relative 'default_cases/set_supervisor_case'
43
+ require_relative 'default_cases/update_details_case'
44
+ require_relative 'default_cases/create_details_case'
45
+ require_relative 'default_cases/create_details_with_supervisor_case'
46
+ require_relative 'default_cases/reinvite_case'
47
+ require_relative 'default_cases/delete_case'
48
+ require_relative 'default_cases/remove_account_case'
49
+ require_relative 'default_cases/refresh_presets'
50
+ require_relative 'default_cases/change_email_case'
51
+ require_relative 'default_cases/set_default_tag_case'
52
+ require_relative 'default_cases/upsert_account_case'
53
+ require_relative 'default_cases/hris_case'
@@ -0,0 +1,47 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ class DefaultCases
5
+ class ChangeEMailCase < BaseCase
6
+
7
+ def process
8
+ @cases.define("change-email", type: :sync) do |entries, people, session|
9
+ remove = session.job_group("main").new("remove account", type: :update, sets: :account)
10
+ change = session.job_group("main").new("change email", type: :update, sets: :core)
11
+ add_account = session.job_group("post").new("add account", type: :update, sets: :account)
12
+
13
+ entries.each.with_index do |entry, i|
14
+ person = people.find(entry)
15
+
16
+ if !person
17
+ session.logger.error("Entry(#{i}) - this person does not exist: #{entry.to_s(:identify)}")
18
+ else
19
+ unless entry.email.downcase == person.email
20
+ account = person.account
21
+ person.account = nil
22
+ remove.add(person)
23
+
24
+ new_email = entry.email
25
+ change.add(person) do |person|
26
+ person.sync
27
+ person.email = new_email
28
+ person
29
+ end
30
+
31
+ add_account.add(person) do |person|
32
+ person.sync
33
+ person.account = account
34
+ person
35
+ end
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,29 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ class DefaultCases
5
+ class CreateDetailsCase < UseCases::BaseCase
6
+
7
+ def process
8
+ @cases.define("create-details", type: :sync) do |entries, people, session, options|
9
+ creation = session.job_group("main").new("create", type: :create, sets: [:core, :details])
10
+
11
+ entries.each.with_index do |entry, i|
12
+ if person = people.find(entry)
13
+ session.logger.error("Entry(#{i}) - this person (id: '#{person.id}') already exists: #{entry.to_s(:identify)}")
14
+ else
15
+ person = session.new_person
16
+ entry.set_core(person, exclude: "supervisor_id")
17
+ entry.set_details(person)
18
+
19
+ creation.add(person)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,49 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ class DefaultCases
5
+ class CreateDetailsWithSupervisorCase < UseCases::BaseCase
6
+
7
+ def process
8
+ # good candidate to do @cases.case("create-details").use.chain(@cases.case("set-supervisor").use)
9
+ @cases.define("create-details-with-supervisor", type: :sync) do |entries, people, session|
10
+ creation = session.job_group("main").new("create", type: :create, sets: [:core, :details])
11
+ supers = session.job_group("post").new("supers", type: :update, sets: :core)
12
+
13
+ entries.each.with_index do |entry, i|
14
+ if person = people.find(entry)
15
+ session.logger.error("Entry(#{i}) - this person (id: '#{person.id}') already exists: #{entry.to_s(:identify)}")
16
+ else
17
+ person = session.new_person
18
+ entry.set_core(person, exclude: "supervisor_id")
19
+ entry.set_details(person)
20
+
21
+ creation.add(person)
22
+
23
+ # set supervisor
24
+ if !(sup_id = entry.supervisor_id)
25
+ person.supervisor_id = nil
26
+ else
27
+ if supervisor = people.person(id: sup_id, external_id: sup_id, email: sup_id)
28
+ person.supervisor_id = supervisor.id
29
+ else
30
+ # delay setting supervisor if does not exit
31
+ supers.add(person) do |person|
32
+ #person = session.new_person(person: person.doc)
33
+ person.sync
34
+ person.supervisor_id = sup_id
35
+ person
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,20 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ class DefaultCases
5
+ class DeleteCase < BaseCase
6
+
7
+ def process
8
+ @cases.define("delete", type: :transform) do |people, session|
9
+ delete = session.job_group("main").new("delete", type: :delete, sets: [:core, :details, :account])
10
+ people.map do |person|
11
+ delete.add(person)
12
+ end
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ module Eco
2
+ module API
3
+ module UseCases
4
+ class DefaultCases
5
+ class EmailAsIdCase < BaseCase
6
+
7
+ def process
8
+ @cases.define("email-as-id", type: :transform) do |people, session|
9
+ job = session.job_group("main").new("update", type: :update, sets: :core)
10
+
11
+ people.each do |person|
12
+ person.external_id = person.email
13
+ job.add(person)
14
+ end
15
+
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end