eco-helpers 3.0.20 → 3.0.22

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/.gitignore +10 -0
  3. data/CHANGELOG.md +55 -5
  4. data/eco-helpers.gemspec +3 -3
  5. data/lib/eco/api/common/class_hierarchy.rb +6 -9
  6. data/lib/eco/api/common/loaders/case_base.rb +12 -4
  7. data/lib/eco/api/common/loaders/config/cli.rb +9 -0
  8. data/lib/eco/api/common/loaders/config/workflow/cases_extension.rb +53 -0
  9. data/lib/eco/api/common/loaders/config/workflow/mailer.rb +2 -14
  10. data/lib/eco/api/common/loaders/config/workflow.rb +4 -0
  11. data/lib/eco/api/common/loaders/config.rb +1 -0
  12. data/lib/eco/api/common/loaders/error_handler.rb +3 -2
  13. data/lib/eco/api/common/loaders/policy.rb +3 -2
  14. data/lib/eco/api/common/loaders/use_case/cli_identify.rb +28 -0
  15. data/lib/eco/api/common/loaders/use_case/target_model.rb +25 -0
  16. data/lib/eco/api/common/loaders/use_case/type.rb +37 -0
  17. data/lib/eco/api/common/loaders/use_case.rb +16 -43
  18. data/lib/eco/api/common/people/default_parsers/xls_parser.rb +1 -1
  19. data/lib/eco/api/common/session/logger/cache.rb +10 -4
  20. data/lib/eco/api/common/session/logger/channels.rb +41 -0
  21. data/lib/eco/api/common/session/logger.rb +9 -0
  22. data/lib/eco/api/error/handler.rb +6 -4
  23. data/lib/eco/api/error/handlers.rb +12 -5
  24. data/lib/eco/api/microcases/people/apply_changes/set_account/account_excluded.rb +34 -0
  25. data/lib/eco/api/microcases/people/apply_changes/set_account.rb +28 -0
  26. data/lib/eco/api/microcases/people/apply_changes/set_core/core_excluded.rb +28 -0
  27. data/lib/eco/api/microcases/people/apply_changes/set_core.rb +27 -0
  28. data/lib/eco/api/microcases/people/apply_changes/set_core_with_supervisor.rb +38 -0
  29. data/lib/eco/api/microcases/people/apply_changes/set_supervisor.rb +69 -0
  30. data/lib/eco/api/microcases/people/apply_changes.rb +19 -0
  31. data/lib/eco/api/microcases/people/fetch/with_each.rb +109 -0
  32. data/lib/eco/api/microcases/people/fetch/with_each_leaver.rb +33 -0
  33. data/lib/eco/api/microcases/people/fetch/with_each_present.rb +42 -0
  34. data/lib/eco/api/microcases/people/fetch/with_each_starter.rb +43 -0
  35. data/lib/eco/api/microcases/people/fetch/with_each_subordinate.rb +41 -0
  36. data/lib/eco/api/microcases/people/fetch/with_supervisor.rb +46 -0
  37. data/lib/eco/api/microcases/people/fetch.rb +23 -0
  38. data/lib/eco/api/microcases/people/integrity/fix_default_group.rb +39 -0
  39. data/lib/eco/api/microcases/people/integrity/fix_filter_tags.rb +55 -0
  40. data/lib/eco/api/microcases/people/integrity/refresh_default_tag.rb +32 -0
  41. data/lib/eco/api/microcases/people/integrity.rb +17 -0
  42. data/lib/eco/api/microcases/people/macro/take_email.rb +141 -0
  43. data/lib/eco/api/microcases/people/macro.rb +13 -0
  44. data/lib/eco/api/microcases/people/manage/cache.rb +36 -0
  45. data/lib/eco/api/microcases/people/manage/load.rb +90 -0
  46. data/lib/eco/api/microcases/people/manage/refresh.rb +59 -0
  47. data/lib/eco/api/microcases/people/manage/search.rb +118 -0
  48. data/lib/eco/api/microcases/people/manage.rb +19 -0
  49. data/lib/eco/api/microcases/people/preserve/default_tag.rb +29 -0
  50. data/lib/eco/api/microcases/people/preserve/filter_tags.rb +34 -0
  51. data/lib/eco/api/microcases/people/preserve/policy_groups.rb +36 -0
  52. data/lib/eco/api/microcases/people/preserve.rb +17 -0
  53. data/lib/eco/api/microcases/people.rb +21 -0
  54. data/lib/eco/api/microcases/person_update.rb +1 -1
  55. data/lib/eco/api/microcases/s3upload_targets.rb +1 -1
  56. data/lib/eco/api/microcases/with_each_contractor_present.rb +40 -0
  57. data/lib/eco/api/microcases.rb +3 -23
  58. data/lib/eco/api/organization/people/multiple_search_results.rb +48 -0
  59. data/lib/eco/api/organization/{people_similarity.rb → people/similarity.rb} +89 -72
  60. data/lib/eco/api/organization/people.rb +40 -66
  61. data/lib/eco/api/organization.rb +0 -1
  62. data/lib/eco/api/policies/policy.rb +7 -5
  63. data/lib/eco/api/policies.rb +9 -4
  64. data/lib/eco/api/session/batch/feedback/generate.rb +60 -0
  65. data/lib/eco/api/session/batch/feedback/getters.rb +28 -0
  66. data/lib/eco/api/session/batch/feedback/identifiers.rb +20 -0
  67. data/lib/eco/api/session/batch/feedback/job_dependencies.rb +45 -0
  68. data/lib/eco/api/session/batch/feedback/request_stat.rb +27 -0
  69. data/lib/eco/api/session/batch/feedback/request_stats.rb +270 -0
  70. data/lib/eco/api/session/batch/feedback.rb +45 -119
  71. data/lib/eco/api/session/batch/job/sets.rb +23 -0
  72. data/lib/eco/api/session/batch/job/type.rb +22 -0
  73. data/lib/eco/api/session/batch/job.rb +19 -18
  74. data/lib/eco/api/session/batch/jobs.rb +6 -2
  75. data/lib/eco/api/session/batch/launcher/mode_size.rb +1 -1
  76. data/lib/eco/api/session/batch/launcher/retry.rb +4 -4
  77. data/lib/eco/api/session/batch/launcher.rb +2 -2
  78. data/lib/eco/api/session/batch/policies.rb +4 -4
  79. data/lib/eco/api/session/batch/searcher.rb +2 -1
  80. data/lib/eco/api/session/batch.rb +0 -1
  81. data/lib/eco/api/session/config/workflow.rb +19 -9
  82. data/lib/eco/api/usecases/base_case/model.rb +54 -0
  83. data/lib/eco/api/usecases/base_case/type.rb +52 -0
  84. data/lib/eco/api/usecases/base_case.rb +5 -29
  85. data/lib/eco/api/usecases/base_io/chaining.rb +48 -0
  86. data/lib/eco/api/usecases/base_io/validations.rb +114 -0
  87. data/lib/eco/api/usecases/base_io.rb +65 -115
  88. data/lib/eco/api/usecases/cli/dsl.rb +3 -1
  89. data/lib/eco/api/usecases/default/people/treat/analyse_people_case.rb +7 -4
  90. data/lib/eco/api/usecases/default/people/treat/supers_cyclic_identify_case.rb +1 -3
  91. data/lib/eco/api/usecases/default/people/treat/supers_hierarchy_case.rb +1 -5
  92. data/lib/eco/api/usecases/default_cases/entries_to_csv_case.rb +2 -2
  93. data/lib/eco/api/usecases/default_cases/hris_case.rb +0 -2
  94. data/lib/eco/api/usecases/default_cases/to_csv_case.rb +3 -6
  95. data/lib/eco/api/usecases/graphql/base.rb +3 -2
  96. data/lib/eco/api/usecases/graphql/helpers/base/case_env.rb +1 -1
  97. data/lib/eco/api/usecases/graphql/helpers/base/error_handling.rb +3 -3
  98. data/lib/eco/api/usecases/graphql/helpers/contractors/base/load.rb +17 -0
  99. data/lib/eco/api/usecases/graphql/helpers/contractors/base.rb +8 -0
  100. data/lib/eco/api/usecases/graphql/helpers/contractors.rb +6 -0
  101. data/lib/eco/api/usecases/graphql/helpers/location/base.rb +5 -4
  102. data/lib/eco/api/usecases/graphql/helpers/location/command.rb +2 -2
  103. data/lib/eco/api/usecases/graphql/helpers.rb +1 -0
  104. data/lib/eco/api/usecases/graphql/samples/contractors/dsl.rb +5 -0
  105. data/lib/eco/api/usecases/graphql/samples/contractors.rb +17 -0
  106. data/lib/eco/api/usecases/graphql/samples/location/service/base.rb +1 -1
  107. data/lib/eco/api/usecases/graphql/samples/location.rb +1 -1
  108. data/lib/eco/api/usecases/graphql/samples.rb +1 -0
  109. data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +0 -1
  110. data/lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb +8 -8
  111. data/lib/eco/api/usecases/use_case/chainer.rb +12 -0
  112. data/lib/eco/api/usecases/use_case.rb +32 -23
  113. data/lib/eco/api/usecases/use_case_chain/chaining.rb +88 -0
  114. data/lib/eco/api/usecases/use_case_chain.rb +17 -62
  115. data/lib/eco/api/usecases/use_case_io/chain.rb +24 -0
  116. data/lib/eco/api/usecases/use_case_io.rb +17 -22
  117. data/lib/eco/api/usecases.rb +12 -4
  118. data/lib/eco/assets.rb +1 -1
  119. data/lib/eco/cli/config/filters/people_filters.rb +6 -5
  120. data/lib/eco/cli/config/input.rb +6 -2
  121. data/lib/eco/cli/config/use_cases.rb +4 -2
  122. data/lib/eco/cli_default/input.rb +49 -29
  123. data/lib/eco/cli_default/options.rb +4 -1
  124. data/lib/eco/cli_default/people.rb +102 -47
  125. data/lib/eco/cli_default/people_filters.rb +5 -1
  126. data/lib/eco/cli_default/workflow.rb +149 -138
  127. data/lib/eco/data/mapper.rb +51 -19
  128. data/lib/eco/language/auxiliar_logger.rb +16 -3
  129. data/lib/eco/language/basic_logger.rb +1 -0
  130. data/lib/eco/language/methods/dsl_able.rb +3 -0
  131. data/lib/eco/version.rb +1 -1
  132. metadata +68 -33
  133. data/lib/eco/api/microcases/account_excluded.rb +0 -26
  134. data/lib/eco/api/microcases/core_excluded.rb +0 -20
  135. data/lib/eco/api/microcases/fix_default_group.rb +0 -33
  136. data/lib/eco/api/microcases/fix_filter_tags.rb +0 -49
  137. data/lib/eco/api/microcases/people_cache.rb +0 -30
  138. data/lib/eco/api/microcases/people_load.rb +0 -84
  139. data/lib/eco/api/microcases/people_refresh.rb +0 -53
  140. data/lib/eco/api/microcases/people_search.rb +0 -112
  141. data/lib/eco/api/microcases/preserve_default_tag.rb +0 -23
  142. data/lib/eco/api/microcases/preserve_filter_tags.rb +0 -28
  143. data/lib/eco/api/microcases/preserve_policy_groups.rb +0 -30
  144. data/lib/eco/api/microcases/refresh_default_tag.rb +0 -26
  145. data/lib/eco/api/microcases/set_account.rb +0 -18
  146. data/lib/eco/api/microcases/set_core.rb +0 -17
  147. data/lib/eco/api/microcases/set_core_with_supervisor.rb +0 -32
  148. data/lib/eco/api/microcases/set_supervisor.rb +0 -63
  149. data/lib/eco/api/microcases/take_email_from_account.rb +0 -129
  150. data/lib/eco/api/microcases/with_each.rb +0 -103
  151. data/lib/eco/api/microcases/with_each_leaver.rb +0 -27
  152. data/lib/eco/api/microcases/with_each_present.rb +0 -36
  153. data/lib/eco/api/microcases/with_each_starter.rb +0 -37
  154. data/lib/eco/api/microcases/with_each_subordinate.rb +0 -33
  155. data/lib/eco/api/microcases/with_supervisor.rb +0 -35
  156. data/lib/eco/api/session/batch/request_stats.rb +0 -266
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 96eaee3dd7897d77b22857cf8f812ce6d0639af324565c54f649c1e8068b7fb4
4
- data.tar.gz: c9af686fe8f01d45eb3ea6a0dc89de276b789dfd6e3f64b515e17107b233b2d3
3
+ metadata.gz: c24fea5e80af03052ddec1ce701651a61e7575d812161ff4f62f8f70c29da1d1
4
+ data.tar.gz: 2c72186bf780afd1b706eb0fbf44669cd68ac1239e0ba95f923462190a08d85d
5
5
  SHA512:
6
- metadata.gz: 66bdc8b7c98b2aa0e60e205ac64b47a302e2cd8dbe1efd1720ad36c04a4f4c1a70b2cbb4d4978c67a17bd0f86893d34b47ff809f95a3e06952c002b872872553
7
- data.tar.gz: f205d190dc159c0218bc1cafa52f139a6faaa133a01190ae1b189d2b8b6ef2470f49b634169effcf2021023803ec58f1793b8ce4c019db9d1dd025df7bbf5493
6
+ metadata.gz: 4bf253ab9cc07090b25ffcec1ff853422e292ce4fe1dcddab026bead5ef48d5a4710d55f79b4a16477c6671d764296938374c6f18521e27ac808529eb1435fa7
7
+ data.tar.gz: 28da9eaed628e6e37c22b5dc3c703867c9941eac6ea2d364142823ffa3e00e86ed54d45648b75231b4e93f86aff666f5a69892cc9255260af4c2c6953b6483bd
data/.idea/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Datasource local storage ignored files
7
+ /dataSources/
8
+ /dataSources.local.xml
9
+ # jetbrains IDE
10
+ .idea
data/CHANGELOG.md CHANGED
@@ -2,7 +2,61 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [3.0.20] - 2024-12-xx
5
+ ## [3.0.22] - 2024-12-xx
6
+
7
+ ### Added
8
+
9
+ - `Eco::Data::Mapper`
10
+ - Ability to pair in lower case
11
+ - `#internal?` and `#external?` would evaluate `true` for a lower case check.
12
+ - `:model` named argument to use cases
13
+ - To diversify use cases
14
+ - `Contractors` namespace (skeleton) onto `Eco::API::UseCases::GraphQL` within:
15
+ - `Helpers`
16
+ - `Samples`
17
+ - Decoupled `Eco::API::Session::Batch::Feedback` into mulitple **modules**
18
+ - Moved `Eco::API::Session::Batch::RequestStats` to be
19
+ - `Eco::API::Session::Batch::Feedback::RequestStats`
20
+
21
+ ### Changed
22
+
23
+ - Moved `Cli` class methods out of `Eco::API::Common::Loaders::UseCase` (to `CliIdentify`)
24
+ - Moved `Eco::API::Organization::PeopleSimilarity` to `Eco::API::Organization::People::Similarity`
25
+ - **IMPORTANT** refactor to base UseCase and IO related classes on `data` (rather than `people`).
26
+ - This change aims for re-usability of existing use case logic.
27
+ - The changes have had impact on the workflow definitions.
28
+ - There is a **todo** list in the default_cli workflow implementation.
29
+ - **Refactor** of `MicroCases` to be based on data model.
30
+ - Upgrade dependencies:
31
+ - `ecoportal-api` gem upgrade.
32
+ - `ecoportal-api-v2` gem upgrade.
33
+ - `ecoportal-api-graphql` gem upgrade.
34
+
35
+ ### Fixed
36
+
37
+ - Workflow should raise exception when referring to an unknown stage
38
+
39
+ ## [3.0.21] - 2024-12-16
40
+
41
+ ### Added
42
+
43
+ - `Eco::API::Common::Session::Logger`
44
+ - Implement **channels** logging.
45
+
46
+ ### Changed
47
+
48
+ - Moved `input` and `people` **cli_default configurations** to a class definition
49
+ - `Eco::Language::AuxiliarLogger#log`
50
+ - Allow for multiple levels
51
+ - Return `NilClass`
52
+
53
+ ### Fixed
54
+
55
+ - `Eco::API::Session::Batch::Job#summary`
56
+ - Ensure a summary of pending jobs can be handled, even if `#launch` was NOT explicitly called.
57
+ - As we don't consolidate, it may give more actual updates than pending, yet this is better than providing the `count` of entries in the job's queue.
58
+
59
+ ## [3.0.20] - 2024-12-07
6
60
 
7
61
  ### Added
8
62
 
@@ -16,8 +70,6 @@ All notable changes to this project will be documented in this file.
16
70
 
17
71
  - On failure, `Eco::API::Session::Job#summary` to give precise estimates on what is pending to be run.
18
72
 
19
- ### Fixed
20
-
21
73
  ## [3.0.19] - 2024-11-21
22
74
 
23
75
  ### Added
@@ -162,8 +214,6 @@ All notable changes to this project will be documented in this file.
162
214
 
163
215
  ## [3.0.6] - 2024-08-26
164
216
 
165
- ### Added
166
-
167
217
  ### Changed
168
218
 
169
219
  - `Eco::API::Microcases#people_search`
data/eco-helpers.gemspec CHANGED
@@ -40,9 +40,9 @@ Gem::Specification.new do |spec|
40
40
  spec.add_dependency 'bcrypt_pbkdf', '~> 1.0'
41
41
  spec.add_dependency 'docx', '>= 0.8.0', '< 0.9'
42
42
  spec.add_dependency 'dotenv', '~> 3'
43
- spec.add_dependency 'ecoportal-api', '~> 0.10', '>= 0.10.7'
44
- spec.add_dependency 'ecoportal-api-graphql', '~> 0.4', '>= 0.4.3'
45
- spec.add_dependency 'ecoportal-api-v2', '~> 2.0', '>= 2.0.12'
43
+ spec.add_dependency 'ecoportal-api', '~> 0.10', '>= 0.10.8'
44
+ spec.add_dependency 'ecoportal-api-graphql', '~> 0.4', '>= 0.4.4'
45
+ spec.add_dependency 'ecoportal-api-v2', '~> 2.0', '>= 2.0.15'
46
46
  spec.add_dependency 'ed25519', '~> 1.2'
47
47
  spec.add_dependency 'fast_excel', '>= 0.5.0', '< 0.6'
48
48
  spec.add_dependency 'fuzzy_match', '>= 2.1.0', '< 2.2'
@@ -15,7 +15,7 @@ module Eco
15
15
 
16
16
  # @return [Array<String>] the `keys` of the current class' `model`
17
17
  def model_attrs
18
- (model && model.keys) || []
18
+ model&.keys || []
19
19
  end
20
20
 
21
21
  # Thanks to this step the format on the declaration of the model is flexible
@@ -24,24 +24,21 @@ module Eco
24
24
  def parse_model(model)
25
25
  case model
26
26
  when String
27
- return parse_model(model.to_sym)
27
+ parse_model(model.to_sym)
28
28
  when Symbol
29
- return {model => nil}
29
+ {model => nil}
30
30
  when Hash
31
- return model.each_with_object({}) do |(k,v), hash|
32
- hash[k.to_sym] = v
33
- end
31
+ model.transform_keys(&:to_sym)
34
32
  when Enumerable
35
- return model.each_with_object({}) do |sub, hash|
33
+ model.each_with_object({}) do |sub, hash|
36
34
  hash.merge!(parse_model(sub))
37
35
  end
38
36
  when NilClass
39
- return nil
37
+ nil
40
38
  else
41
39
  raise "Incorrect model declaration, allowed String, Symbol, Hash and Enumerable. Given: #{model.class}"
42
40
  end
43
41
  end
44
-
45
42
  end
46
43
  end
47
44
  end
@@ -6,17 +6,25 @@ module Eco
6
6
  class << self
7
7
  attr_writer :name, :type
8
8
 
9
+ alias_method :original_name, :name
10
+
9
11
  # The name that this case, policy or error handler will have.
10
12
  def name(value = nil)
11
- name_only_once! if value
12
- set_created_at!
13
- return @name ||= to_s unless value
13
+ name_only_once! if value
14
+ set_created_at! unless @name
15
+ return original_name unless @name || value
16
+ return @name unless value
17
+
14
18
  @name = value
15
19
  end
16
20
 
17
21
  # Prevent the same class to be re-opened/re-named
18
22
  def name_only_once!
19
- raise "You have already declared #{self} or you are trying to give it a name twice" if @name
23
+ return unless @name
24
+
25
+ msg = "You have already declared #{self} "
26
+ msg << "or you are trying to give it a name twice"
27
+ raise msg if @name
20
28
  end
21
29
  end
22
30
 
@@ -0,0 +1,9 @@
1
+ class Eco::API::Common::Loaders::CliConfig < Eco::API::Common::Loaders::Config
2
+ class << self
3
+ def config
4
+ ASSETS.cli.config
5
+ end
6
+ end
7
+
8
+ delegate_missing_to :config
9
+ end
@@ -0,0 +1,53 @@
1
+ class Eco::API::Common::Loaders::Workflow
2
+ module CasesExtension
3
+ private
4
+
5
+ def cli_usecases
6
+ cli.config.usecases
7
+ end
8
+
9
+ def cli_active_cases(io)
10
+ cli_usecases.active(io: io)
11
+ end
12
+
13
+ def cli_update_cases(io)
14
+ cli_active_cases(io).select do |usecase, _data|
15
+ %i[transform sync].any? { |type| usecase.type == type }
16
+ end
17
+ end
18
+
19
+ def cli_other_cases(io)
20
+ cli_active_cases(io).select do |usecase, _data|
21
+ %i[other].any? { |type| usecase.type == type }
22
+ end
23
+ end
24
+
25
+ def cli_input_cases(io)
26
+ cli_active_cases(io).select do |usecase, _data|
27
+ io.class.input_required?(usecase.type)
28
+ end
29
+ end
30
+
31
+ def cli_data_cases(io)
32
+ cli_active_cases(io).select do |usecase, _data|
33
+ io.class.data_required?(usecase.type)
34
+ end
35
+ end
36
+
37
+ def some_update_case?(io)
38
+ cli_update_cases(io).any?
39
+ end
40
+
41
+ def some_other_case?(io)
42
+ cli_other_cases(io).any?
43
+ end
44
+
45
+ def some_input_case?(io)
46
+ cli_input_cases(io).any?
47
+ end
48
+
49
+ def some_data_case?(io)
50
+ cli_data_cases(io).any?
51
+ end
52
+ end
53
+ end
@@ -19,7 +19,7 @@ class Eco::API::Common::Loaders::Workflow::Mailer < Eco::API::Common::Loaders::W
19
19
  next unless session.config.run_mode_remote?
20
20
 
21
21
  # temporary contingency: maybe_error_or_tree_updates?
22
- next unless some_update?(io) || maybe_error_pages_or_tree_updates?(io)
22
+ next unless some_update_case?(io) || maybe_error_pages_or_tree_updates?(io)
23
23
 
24
24
  subject = base_subject
25
25
 
@@ -57,25 +57,13 @@ class Eco::API::Common::Loaders::Workflow::Mailer < Eco::API::Common::Loaders::W
57
57
  "#{active_enviro}#{space_desc}"
58
58
  end
59
59
 
60
- def some_update?(io)
61
- cli.config.usecases.active(io: io).any? do |usecase, _data|
62
- %i[transform sync].any? { |type| usecase.type == type }
63
- end
64
- end
65
-
66
- def other_case?(io)
67
- cli.config.usecases.active(io: io).any? do |usecase, _data|
68
- %i[other].any? { |type| usecase.type == type }
69
- end
70
- end
71
-
72
60
  def error?
73
61
  !!error
74
62
  end
75
63
 
76
64
  # @note at some stage, tree cases should have their own case type
77
65
  def maybe_error_pages_or_tree_updates?(io)
78
- other_case?(io) && error?
66
+ some_other_case?(io) && error?
79
67
  end
80
68
 
81
69
  def errors_n_warnings(io)
@@ -1,10 +1,14 @@
1
1
  class Eco::API::Common::Loaders::Workflow < Eco::API::Common::Loaders::Config
2
+ require_relative 'workflow/cases_extension'
3
+
2
4
  class << self
3
5
  def workflow
4
6
  config.workflow
5
7
  end
6
8
  end
7
9
 
10
+ extend CasesExtension
11
+
8
12
  delegate_missing_to :workflow
9
13
  end
10
14
 
@@ -33,5 +33,6 @@ class Eco::API::Common::Loaders::Config
33
33
  delegate_missing_to :config
34
34
  end
35
35
 
36
+ require_relative 'config/cli'
36
37
  require_relative 'config/workflow'
37
38
  require_relative 'config/session'
@@ -25,12 +25,13 @@ module Eco
25
25
  handlers.on(error, &method(:main))
26
26
  end
27
27
 
28
- # @param people [Eco::API::Organization::People] the people in the queue of the current `job`
28
+ # @param data [Variant]
29
+ # - people [Eco::API::Organization::People] the people in the queue of the current `job`
29
30
  # @param session [Eco::API::Session] the current session where the usecase kicks in.
30
31
  # @param options [Hash] the options that modify the case behaviour or bring some dependencies.
31
32
  # @param handler [Eco::API::Error::Hanlder] the `error handler` instance object.
32
33
  # @param job [Eco::API::Session::Batch::Job] the `Batch::Job` made on purpose for this handler.
33
- def main(people, session, options, handler, job) # rubocop:disable Lint/UnusedMethodArgument
34
+ def main(data, session, options, handler, job) # rubocop:disable Lint/UnusedMethodArgument
34
35
  raise "You should implement this method"
35
36
  end
36
37
 
@@ -10,12 +10,13 @@ module Eco
10
10
  policies.define(name, &method(:main))
11
11
  end
12
12
 
13
- # @param people [Eco::API::Organization::People] the people in the queue of the current `job`
13
+ # @param data [Variant]
14
+ # - people [Eco::API::Organization::People] the people in the queue of the current `job`
14
15
  # @param session [Eco::API::Session] the current session where the usecase kicks in.
15
16
  # @param options [Hash] the options that modify the case behaviour or bring some dependencies.
16
17
  # @param policy [Eco::API::Policies::Policy] the `policy` instance object.
17
18
  # @param job [Eco::API::Session::Batch::Job] the `Batch::Job` that these `people` belong to the queue thereof.
18
- def main(people, session, options, policy, job) # rubocop:disable Lint/UnusedMethodArgument
19
+ def main(data, session, options, policy, job = nil) # rubocop:disable Lint/UnusedMethodArgument
19
20
  raise "You should implement this method"
20
21
  end
21
22
  end
@@ -0,0 +1,28 @@
1
+ class Eco::API::Common::Loaders::UseCase
2
+ module CliIdentify
3
+ def cli!
4
+ cli&.apply!
5
+ end
6
+
7
+ def cli(cli_class = nil)
8
+ if cli_class.is_a?(Class)
9
+ msg = 'cli_class should inherit from Eco::API::UseCases::Cli'
10
+ raise ArgumentError, msg unless cli_class < Eco::API::UseCases::Cli
11
+
12
+ @cli = cli_class
13
+ elsif cli_class.nil?
14
+ return @cli if instance_variable_defined?(:@cli) && !@cli.nil?
15
+
16
+ # try to see if it's namespaced after the use case it provisions cli integration
17
+ begin
18
+ try_class = [to_s, 'Cli'].join('::')
19
+ @cli = Kernel.const_get(try_class)
20
+ rescue NameError
21
+ nil
22
+ end
23
+ else
24
+ raise ArgumentError, "Expecting a class. Given: #{cli_class.class} object"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ class Eco::API::Common::Loaders::UseCase
2
+ module TargetModel
3
+ class << self
4
+ def included(base)
5
+ super
6
+
7
+ base.extend(ClassMethods)
8
+ end
9
+ end
10
+
11
+ module ClassMethods
12
+ #@note it inherently defaults to `:people` (out of backwards compatibility)
13
+ # @return [String] the `target_model`
14
+ def target_model(value = nil)
15
+ return @target_model = value if value
16
+
17
+ @target_model if @target_model
18
+ end
19
+ end
20
+
21
+ def target_model
22
+ self.class.target_model
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ class Eco::API::Common::Loaders::UseCase
2
+ module Type
3
+ class << self
4
+ def included(base)
5
+ super
6
+
7
+ base.extend(ClassMethods)
8
+ end
9
+ end
10
+
11
+ module ClassMethods
12
+ # @return [Symbol] the `type` of usecase (i.e. `:sync`, `:transform`, `:import`, `:other`)
13
+ def type(value = nil)
14
+ return @type = value if value
15
+ return @type if @type
16
+
17
+ types_sym_str = available_types.map do |tp|
18
+ ":#{tp}"
19
+ end.join(', ')
20
+
21
+ msg = "You should specify a type of case "
22
+ msg << "[#{types_sym_str}] for #{self}"
23
+ raise msg
24
+ end
25
+
26
+ private
27
+
28
+ def available_types
29
+ Eco::API::UseCases::BaseCase.types
30
+ end
31
+ end
32
+
33
+ def type
34
+ self.class.type
35
+ end
36
+ end
37
+ end
@@ -3,66 +3,39 @@ module Eco
3
3
  module Common
4
4
  module Loaders
5
5
  class UseCase < Eco::API::Common::Loaders::CaseBase
6
- class << self
7
- # @return [Symbol] the `type` of usecase (i.e. `:sync`, `:transform`, `:import`, `:other`)
8
- def type(value = nil)
9
- unless value
10
- msg = "You should specify a type of case "
11
- msg << "[:sync, :transform, :import, :other] for #{self}"
12
- return @type || (raise msg)
13
- end
14
- @type = value
15
- end
6
+ require_relative 'use_case/type'
7
+ require_relative 'use_case/target_model'
8
+ require_relative 'use_case/cli_identify'
16
9
 
17
- def cli!
18
- cli&.apply!
19
- end
10
+ include Type
11
+ include TargetModel
12
+ extend CliIdentify
20
13
 
21
- def cli(cli_class = nil)
22
- if cli_class.is_a?(Class)
23
- msg = "cli_class should inherit from Eco::API::UseCases::Cli"
24
- raise ArgumentError, msg unless cli_class < Eco::API::UseCases::Cli
25
-
26
- @cli = cli_class
27
- elsif cli_class.nil?
28
- return @cli if instance_variable_defined?(:@cli) && !@cli.nil?
29
-
30
- # try to see if it's namespaced after the use case it provisions cli integration
31
- begin
32
- try_class = [to_s, 'Cli'].join('::')
33
- @cli = Kernel.const_get(try_class)
34
- rescue NameError
35
- nil
36
- end
37
- else
38
- raise ArgumentError, "Expecting a class. Given: #{cli_class.class} object"
39
- end
40
- end
41
- end
42
-
43
- inheritable_class_vars :type, :cli
14
+ inheritable_class_vars :cli, :type, :target_model
44
15
 
45
16
  def initialize(usecases) # rubocop:disable Lint/MissingSuper
46
17
  msg = "Expected Eco::API::UseCases. Given #{usecases.class}"
47
18
  raise msg unless usecases.is_a?(Eco::API::UseCases)
48
19
 
49
- usecases.define(name, type: type, &method(:main))
20
+ usecases.define(
21
+ name,
22
+ type: type,
23
+ model: target_model,
24
+ &method(:main)
25
+ )
50
26
  end
51
27
 
52
28
  # The parameters of this method will depend on the `type` of usecase.
53
29
  # @param entries [Eco::API::Common::People::Entries] the input entries with the data.
54
- # @param people [Eco::API::Organization::People] the people in the queue of the current `job`
30
+ # @param data [Variant]
31
+ # - people [Eco::API::Organization::People] the people in the queue of the current `job`
55
32
  # @param session [Eco::API::Session] the current session where the usecase kicks in.
56
33
  # @param options [Hash] the options that modify the case behaviour or bring some dependencies.
57
34
  # @param usecase [Eco::API::Policies::Policy] the `usecase` instance object.
58
- def main(entries, people, session, options, usecase) # rubocop:disable Lint/UnusedMethodArgument
35
+ def main(*_args)
59
36
  raise "You should implement this method"
60
37
  end
61
38
 
62
- def type
63
- self.class.type
64
- end
65
-
66
39
  def cli_apply!
67
40
  self.class.cli!
68
41
  end
@@ -27,7 +27,7 @@ class Eco::API::Common::People::DefaultParsers::XLSParser < Eco::API::Common::Lo
27
27
  end
28
28
 
29
29
  def expected_headers
30
- log(:warn) {
30
+ log(:info) {
31
31
  "Headers detection is using your fields_map.json file (native behaviour)"
32
32
  }
33
33
  session.fields_mapper.list(:external).uniq
@@ -4,7 +4,8 @@ module Eco
4
4
  module Session
5
5
  class Logger
6
6
  class Cache
7
- LEVELS = %w[UNKNOWN FATAL ERROR WARN INFO DEBUG].freeze
7
+ LEVELS = %w[UNKNOWN FATAL ERROR WARN INFO DEBUG].freeze
8
+ CHANNELS = Logger::CHANNELS.map(&:to_s).map(&:upcase).freeze
8
9
 
9
10
  def initialize
10
11
  reset
@@ -56,7 +57,8 @@ module Eco
56
57
  end
57
58
 
58
59
  def to_datetime(value)
59
- return nil unless value
60
+ return unless value
61
+
60
62
  Time.parse(value)
61
63
  end
62
64
 
@@ -64,7 +66,7 @@ module Eco
64
66
  levels = [value].flatten.map {|v| to_level(v)}.compact
65
67
  return levels unless levels.empty?
66
68
 
67
- LEVELS
69
+ valid_levels
68
70
  end
69
71
 
70
72
  def to_level(value)
@@ -75,7 +77,7 @@ module Eco
75
77
 
76
78
  def valid_level!(str)
77
79
  return true unless str
78
- return true if LEVELS.any? {|lev| str == lev}
80
+ return true if valid_levels.any? {|lev| str == lev}
79
81
 
80
82
  msg = "Unknown level #{str}. Should be one of #{LEVELS}"
81
83
  raise ArgumentError, msg
@@ -87,6 +89,10 @@ module Eco
87
89
 
88
90
  value
89
91
  end
92
+
93
+ def valid_levels
94
+ @valid_levels ||= self.class::LEVELS | self.class::CHANNELS
95
+ end
90
96
  end
91
97
  end
92
98
  end
@@ -0,0 +1,41 @@
1
+ module Eco
2
+ module API
3
+ module Common
4
+ module Session
5
+ class Logger
6
+ module Channels
7
+ CHANNELS = %i[general].freeze
8
+
9
+ class << self
10
+ def included(base)
11
+ super
12
+ base.extend ClassMethods
13
+ end
14
+ end
15
+
16
+ module ClassMethods
17
+ def channels!(&def_block)
18
+ str = "Block with channel implementation expected. None given."
19
+ raise ArgumentError, str unless block_given?
20
+
21
+ channels.each do |channel|
22
+ meth = channel.to_s.downcase.to_sym
23
+
24
+ define_method(meth) do |msg = nil, &block|
25
+ def_block.call(meth, msg, &block)
26
+ end
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def channels
33
+ self::CHANNELS
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -5,6 +5,15 @@ module Eco
5
5
  class Logger < Eco::Language::BasicLogger
6
6
  TIMESTAMP_PATTERN = '%Y-%m-%dT%H:%M:%S'.freeze
7
7
 
8
+ require_relative 'logger/channels'
9
+ include Channels
10
+
11
+ channels! do |channel, message = nil, &block|
12
+ format_proc(console: true) do |severity, datetime, msg, formatted_msg|
13
+ cache.add(severity, datetime, msg, formatted_msg)
14
+ end.call(channel, Time.now, 'prog_name', message || block.call)
15
+ end
16
+
8
17
  attr_reader :cache
9
18
 
10
19
  def initialize(file_level: ::Logger::DEBUG, log_file: nil, enviro: nil, **kargs)
@@ -2,17 +2,19 @@ module Eco
2
2
  module API
3
3
  class Error
4
4
  class Handler < Eco::API::UseCases::UseCase
5
- @types = [:error_handler]
5
+ TYPES = [:error_handler].freeze
6
6
 
7
7
  def initialize(name, type: :error_handler, root:, &block)
8
- super(name, type: type, root: root, &block)
8
+ super
9
9
  end
10
10
 
11
11
  def root=(value)
12
- raise "Root should be a Eco::API::Error::Handlers object. Given: #{value}" if !value.is_a?(Eco::API::Error::Handlers)
12
+ msg = "Root should be a Eco::API::Error::Handlers object. "
13
+ msg << "Given: #{value.class}"
14
+ raise ArgumentError, msg unless value.is_a?(Eco::API::Error::Handlers)
15
+
13
16
  @root = value
14
17
  end
15
-
16
18
  end
17
19
  end
18
20
  end