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
@@ -34,6 +34,7 @@ module Eco
34
34
  # Unless specified, assume Cli class hangs from its case namespace
35
35
  def usecase
36
36
  raise "#{self} is to use to extend a class" unless is_a?(Class)
37
+
37
38
  @usecase ||= Kernel.const_get(to_s.split('::')[0..-2].join('::'))
38
39
  end
39
40
 
@@ -60,6 +61,7 @@ module Eco
60
61
 
61
62
  def callback(&block)
62
63
  return @callback unless block_given?
64
+
63
65
  @callback = block
64
66
  end
65
67
 
@@ -69,7 +71,7 @@ module Eco
69
71
 
70
72
  def add_option(arg, desc = nil, &block)
71
73
  tap do
72
- "Overriding option '#{arg}' on case '#{name}'" if options.key?(arg)
74
+ puts "Overriding option '#{arg}' on case '#{name}'" if options.key?(arg)
73
75
  @options[arg] = Eco::API::UseCases::Cli::Option.new(arg, desc, &block)
74
76
  end
75
77
  end
@@ -4,9 +4,7 @@ class Eco::API::UseCases::Default::People::Treat::Analyse < Eco::API::Common::Lo
4
4
 
5
5
  require_relative 'cli/analyse_people_cli'
6
6
 
7
- attr_reader :people
8
-
9
- def main(_people, _session, options, _usecase)
7
+ def main(*_args)
10
8
  options[:end_get] = false
11
9
 
12
10
  if case_options[:identify_duplicates]
@@ -97,7 +95,12 @@ class Eco::API::UseCases::Default::People::Treat::Analyse < Eco::API::Common::Lo
97
95
  opts.deep_merge!(export: {options: {internal_names: true}})
98
96
  # opts.deep_merge!(export: {options: {split_schemas: true}})
99
97
 
100
- session.process_case("to-csv", type: :export, people: data, options: opts.merge(options.slice(:export)))
98
+ session.process_case(
99
+ 'to-csv',
100
+ type: :export,
101
+ data: data,
102
+ options: opts.merge(options.slice(:export))
103
+ )
101
104
  end
102
105
 
103
106
  def unique_words?
@@ -8,9 +8,7 @@ class Eco::API::UseCases::Default::People::Treat::SupersCyclicIdentify < Eco::AP
8
8
  OUT_TIME_FORMAT = '%Y%m%dT%H%M%S'.freeze
9
9
  OUT_FILENAME = "cyclic_supers".freeze
10
10
 
11
- attr_reader :people
12
-
13
- def main(_people, _session, options, _usecase)
11
+ def main(*_args)
14
12
  options[:end_get] = false
15
13
  save!(cyclic_sets)
16
14
  end
@@ -8,12 +8,8 @@ class Eco::API::UseCases::Default::People::Treat::SupersHierarchy < Eco::API::Co
8
8
  OUT_TIME_FORMAT = '%Y%m%dT%H%M%S'.freeze
9
9
  OUT_FILENAME = "supers_hierarchy".freeze
10
10
 
11
- attr_reader :people
12
-
13
- def main(people, _session, options, _usecase)
11
+ def main(*_args)
14
12
  options[:end_get] = false
15
- @people = people
16
-
17
13
  save!(hierarchy, file: output_filename)
18
14
  end
19
15
 
@@ -2,8 +2,8 @@ class Eco::API::UseCases::DefaultCases::EntriesToCsv < Eco::API::Common::Loaders
2
2
  name "entries-to-csv"
3
3
  type :import
4
4
 
5
- def main(entries, session, options, usecase)
6
- entries.export(filename)
5
+ def main(*_args)
6
+ input.export(filename)
7
7
  end
8
8
 
9
9
  private
@@ -3,10 +3,8 @@ class Eco::API::UseCases::DefaultCases::HrisCase < Eco::API::Common::Loaders::Us
3
3
  type :sync
4
4
 
5
5
  attr_reader :creation, :update, :supers, :leavers
6
- attr_reader :people
7
6
 
8
7
  def main(entries, people, session, options, usecase)
9
- @people = people
10
8
  require_only_one_schema!
11
9
  micro = session.micro
12
10
  @leavers = session.new_job("pre", "leavers", :update, usecase, :account)
@@ -4,11 +4,8 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
4
4
 
5
5
  OUT_FILENAME = 'pm'.freeze
6
6
 
7
- attr_reader :people
8
-
9
7
  def main(people, _session, options, _usecase)
10
8
  options[:end_get] = false
11
- @people = people
12
9
 
13
10
  unless people && !people.empty?
14
11
  log(:warn) { "No source people to create the file... aborting!" }
@@ -113,9 +110,9 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
113
110
 
114
111
  def by_schema
115
112
  people.group_by do |person|
116
- if (details = person.details)
117
- details.schema_id
118
- end
113
+ next unless (details = person.details)
114
+
115
+ details.schema_id
119
116
  end.transform_values do |persons|
120
117
  people.newFrom persons
121
118
  end
@@ -2,13 +2,13 @@ class Eco::API::UseCases::GraphQL::Base < Eco::API::Common::Loaders::UseCase
2
2
  class NotImplementedMethod < StandardError
3
3
  end
4
4
 
5
- name "graphql-base"
5
+ name 'graphql-base'
6
6
  type :other
7
7
 
8
8
  include Eco::API::UseCases::GraphQL::Helpers::Base
9
9
  include Eco::Language::Methods::CallDetector
10
10
 
11
- def main(_sess, options, _case)
11
+ def main(*_args)
12
12
  options[:end_get] = false
13
13
  process
14
14
  end
@@ -16,6 +16,7 @@ class Eco::API::UseCases::GraphQL::Base < Eco::API::Common::Loaders::UseCase
16
16
  # Write here your script
17
17
  def process
18
18
  return unless called_via?(Eco::API::UseCases::GraphQL::Base, __method__)
19
+
19
20
  raise NotImplementedMethod, "You need to inherit from this class ('#{self.class}')"
20
21
  end
21
22
  end
@@ -13,7 +13,7 @@ module Eco::API::UseCases::GraphQL::Helpers::Base
13
13
  end
14
14
 
15
15
  def simulate?
16
- options[:simulate]
16
+ options[:simulate] || options[:dry_run]
17
17
  end
18
18
  end
19
19
  end
@@ -32,9 +32,9 @@ module Eco::API::UseCases::GraphQL::Helpers::Base
32
32
  rescue StandardError => err
33
33
  self.exception ||= err
34
34
 
35
- unless exception_already_captured?(err)
36
- log(:error) { err.patch_full_message }
37
- end
35
+ return unless exception_already_captured?(err)
36
+
37
+ log(:error) { err.patch_full_message }
38
38
  rescue SystemExit
39
39
  @exiting = true
40
40
  raise
@@ -0,0 +1,17 @@
1
+ module Eco::API::UseCases::GraphQL::Helpers::Contractors
2
+ module Base
3
+ module Load
4
+ include Eco::API::UseCases::GraphQL::Helpers::Base
5
+
6
+ def load_contractors
7
+ contractor_entities
8
+ end
9
+
10
+ private
11
+
12
+ def contractor_entities
13
+ graphql.currentOrganization.contractorEntities
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base/load'
2
+
3
+ module Eco::API::UseCases::GraphQL::Helpers::Contractors
4
+ module Base
5
+ include Eco::API::UseCases::GraphQL::Helpers::Base
6
+ include Load
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ module Eco::API::UseCases::GraphQL::Helpers
2
+ module Contractors
3
+ end
4
+ end
5
+
6
+ require_relative 'contractors/base'
@@ -14,9 +14,9 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
14
14
  @target_structure_id ||= current_tree.id if current_tree.respond_to?(:id)
15
15
  return @target_structure_id if @target_structure_id
16
16
 
17
- msg = "Const TARGET_STRUCTURE_ID has not been defined, "
18
- msg << "nor options(:source, :structure_id). "
19
- msg << "Infering active locations structure."
17
+ msg = 'Const TARGET_STRUCTURE_ID has not been defined, '
18
+ msg << 'nor options(:source, :structure_id). '
19
+ msg << 'Infering active locations structure.'
20
20
  log(:warn) { msg }
21
21
 
22
22
  # a backup happens:
@@ -51,7 +51,8 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
51
51
  end
52
52
 
53
53
  def target_structure_id_const
54
- return nil unless self.class.const_defined?(:TARGET_STRUCTURE_ID)
54
+ return unless self.class.const_defined?(:TARGET_STRUCTURE_ID)
55
+
55
56
  self.class.const_get(:TARGET_STRUCTURE_ID)
56
57
  end
57
58
  end
@@ -15,7 +15,7 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
15
15
  # @param commands [Array<Hash>]
16
16
  def input(commands, force_continue: force_continue?)
17
17
  {
18
- clientMutationId: "",
18
+ clientMutationId: '',
19
19
  id: target_structure_id,
20
20
  force: force_continue,
21
21
  commands: commands
@@ -34,7 +34,7 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
34
34
 
35
35
  if batch_input[:commands].empty?
36
36
  msg = "#{dry_run_msg}No commands for '#{desc}'."
37
- msg << " Skipping batch..." unless simulate?
37
+ msg << ' Skipping batch...' unless simulate?
38
38
  log(:info) { msg }
39
39
 
40
40
  return
@@ -5,3 +5,4 @@ end
5
5
 
6
6
  require_relative 'helpers/base'
7
7
  require_relative 'helpers/location'
8
+ require_relative 'helpers/contractors'
@@ -0,0 +1,5 @@
1
+ module Eco::API::UseCases::GraphQL::Samples
2
+ module Contractors::DSL
3
+ include Eco::API::UseCases::GraphQL::Helpers::Contractors::Base
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ module Eco::API::UseCases::GraphQL
2
+ class Samples::Contractors < Eco::API::UseCases::GraphQL::Base
3
+ name 'contractors_base'
4
+ target_model :contractors
5
+
6
+ require_relative 'contractors/dsl'
7
+ include Eco::API::UseCases::GraphQL::Samples::Contractors::DSL
8
+
9
+ def main(*_args)
10
+ options[:end_get] = false
11
+ end
12
+
13
+ def process
14
+ raise 'Please do not use this method with contractor use cases. Use main'
15
+ end
16
+ end
17
+ end
@@ -1,9 +1,9 @@
1
+ # @todo maybe delete, it isn't being used anywhere
1
2
  module Eco::API::UseCases::GraphQL::Samples
2
3
  module Location::Service
3
4
  # Base class to create service classes that work like a use case
4
5
  class Base
5
6
  include Eco::API::UseCases::GraphQL::Samples::Location::DSL
6
-
7
7
  end
8
8
  end
9
9
  end
@@ -1,6 +1,6 @@
1
1
  module Eco::API::UseCases::GraphQL
2
2
  class Samples::Location < Eco::API::UseCases::GraphQL::Base
3
- name "location-base"
3
+ name 'location-base'
4
4
 
5
5
  require_relative 'location/dsl'
6
6
  include Eco::API::UseCases::GraphQL::Samples::Location::DSL
@@ -4,3 +4,4 @@ module Eco::API::UseCases::GraphQL
4
4
  end
5
5
 
6
6
  require_relative 'samples/location'
7
+ require_relative 'samples/contractors'
@@ -211,7 +211,6 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
211
211
  return
212
212
  end
213
213
 
214
- patch = patch_doc(ooze)
215
214
  # store the request
216
215
  File.open(SAVE_PATCH, "w") do |file|
217
216
  #file << (patch_doc || {}).to_json
@@ -1,9 +1,9 @@
1
1
  # Base class to run a script against a single ooze.
2
2
  class Eco::API::UseCases::OozeSamples::OozeRunBaseCase < Eco::API::UseCases::OozeSamples::OozeBaseCase
3
- name "ooze-run-base"
3
+ name 'ooze-run-base'
4
4
  type :other
5
5
 
6
- SAVE_PATCH = "ooze_patch_update.json".freeze
6
+ SAVE_PATCH = 'ooze_patch_update.json'.freeze
7
7
 
8
8
  def main(session, options, usecase)
9
9
  super(session, options, usecase) do
@@ -21,8 +21,8 @@ class Eco::API::UseCases::OozeSamples::OozeRunBaseCase < Eco::API::UseCases::Ooz
21
21
  end
22
22
  end
23
23
 
24
- def process_ooze(page = target)
25
- raise "You need to redefine this method"
24
+ def process_ooze(_page = target)
25
+ raise 'You need to redefine this method'
26
26
  end
27
27
 
28
28
  private
@@ -50,15 +50,15 @@ class Eco::API::UseCases::OozeSamples::OozeRunBaseCase < Eco::API::UseCases::Ooz
50
50
  end
51
51
 
52
52
  def exit_if_no_changes!
53
- return if !!patch_doc["page"]
53
+ return unless patch_doc['page'].nil?
54
54
 
55
- log(:info) { "No Changes!!" }
55
+ log(:info) { 'No Changes!!' }
56
56
  exit(0)
57
57
  end
58
58
 
59
59
  def prompt_to_confirm!
60
- micro.prompt_user("Do you want to proceed (y/N)?", default: "Y") do |response|
61
- exit(1) unless response.upcase.start_with?("Y")
60
+ micro.prompt_user('Do you want to proceed (y/N)?', default: 'Y') do |response|
61
+ exit(1) unless response.upcase.start_with?('Y')
62
62
  end
63
63
  end
64
64
  end
@@ -0,0 +1,12 @@
1
+ class Eco::API::UseCases::UseCase
2
+ module Chainer
3
+ def chainer
4
+ # @todo: root is a Eco::API::UseCases that will not point to this new case.
5
+ # => Moreover, the name and type will be the same as self
6
+ Eco::API::UseCases::UseCaseChain.new(
7
+ usecase: self,
8
+ root: @root
9
+ )
10
+ end
11
+ end
12
+ end
@@ -2,18 +2,18 @@ module Eco
2
2
  module API
3
3
  class UseCases
4
4
  class UseCase < BaseCase
5
- @types = BaseCase.types
5
+ require_relative 'use_case/chainer'
6
+ include Chainer
6
7
 
7
- attr_reader :name, :type, :times_launched
8
+ attr_reader :name, :type, :model
8
9
  attr_reader :options
10
+ attr_reader :times_launched
9
11
 
10
- def initialize(name, type:, root:, &block)
11
- invalid_type_err = InvalidType.new(
12
- "Invalid type for '#{name}'.",
13
- type: type,
14
- types: self.class.types
15
- )
16
- raise invalid_type_err unless self.class.valid_type?(type)
12
+ def initialize(name, type:, root:, model: nil, &block)
13
+ validate_type!(type, msg: "Invalid type for '#{name}'.")
14
+
15
+ model ||= self.class.type_to_default_model(type)
16
+ validate_model!(model, msg: "Invalid model for '#{name}'.")
17
17
 
18
18
  super()
19
19
 
@@ -21,6 +21,7 @@ module Eco
21
21
  @callback = block
22
22
  @name = name
23
23
  @type = type
24
+ @model = model
24
25
  @times_launched = 0
25
26
  end
26
27
 
@@ -30,12 +31,6 @@ module Eco
30
31
  callback_self
31
32
  end
32
33
 
33
- def chainer
34
- # @todo: root is a Eco::API::UseCases that will not point to this new case.
35
- # => Moreover, the name and type will be the same as self
36
- Eco::API::UseCases::UseCaseChain.new(usecase: self, root: @root)
37
- end
38
-
39
34
  def root=(value)
40
35
  msg = "Root should be a Eco::API::UseCases. Given: #{value.class}"
41
36
  raise ArgumentError, msg unless value.is_a?(Eco::API::UseCases)
@@ -48,7 +43,9 @@ module Eco
48
43
  # @param kargs [Hash] hash with symbol keys.
49
44
  # @option kargs [Eco::API::Common::People::Entries, Eco::API::Organization::People] :input
50
45
  # the input data of reference.
51
- # @option kargs [Eco::API::Organization::People] :people object.
46
+ # @option kargs [Variant] :data object.
47
+ # @option kargs [Eco::API::Organization::People] :people object.
48
+ # @option kargs [Eco::API::Organization::Contractors] :contractors object.
52
49
  # @option kargs [Eco::API:Session] :session
53
50
  # @option kargs [Hash] :options hash with symbol keys (i.e. behaviour modifiers, cli trackers, filters, etc.)
54
51
  # @return [Eco::API::UseCases::UseCaseIO] an io with the result in output
@@ -94,19 +91,31 @@ module Eco
94
91
  def set_session_n_options(uio) # rubocop:disable Naming/AccessorMethodName
95
92
  return false unless callback_from_loader?
96
93
 
97
- opts = uio.options || @options
98
- sess = uio.session
99
- peo = uio.people
100
- ent = uio.input
94
+ opts = uio.options || @options
95
+ sess = uio.session
96
+ dt = uio.data
97
+ ent = uio.input
98
+
99
+ mdl = model
100
+
101
101
  use_case_self = self
102
102
 
103
103
  callback_self.instance_eval do
104
104
  @session = sess
105
105
  @options = opts
106
106
 
107
- if peo
108
- @people = peo
109
- singleton_class.attr_reader(:people) unless respond_to?(:people)
107
+ if dt
108
+ @data = dt
109
+ singleton_class.attr_reader(:data) unless respond_to?(:data)
110
+
111
+ case mdl
112
+ when :people
113
+ @people = dt
114
+ singleton_class.attr_reader(:people) unless respond_to?(:people)
115
+ when :contractors
116
+ @contractors = dt
117
+ singleton_class.attr_reader(:contractors) unless respond_to?(:contractors)
118
+ end
110
119
  end
111
120
 
112
121
  if ent # entries/input
@@ -0,0 +1,88 @@
1
+ class Eco::API::UseCases::UseCaseChain
2
+ module Chaining
3
+ MAX_CHAINS = 70
4
+ @@num_chains = 0
5
+
6
+ def use(preserve_chains: false, recursive: false)
7
+ UseCase.new(
8
+ @name,
9
+ type: @type,
10
+ model: @model,
11
+ root: @root,
12
+ &@case
13
+ ).tap do |newcase|
14
+ next unless preserve_chains
15
+
16
+ chain_use = {preserve_chains: recursive, recursive: recursive}
17
+
18
+ @chains = @chains.map do |usecase|
19
+ if usecase.respond_to?(:call)
20
+ proc do |usegroup|
21
+ usecase = usecase.call(usegroup)
22
+ usecase.use(**chain_use).chain_to(newcase)
23
+ usecase
24
+ end
25
+ elsif usecase.is_a?(UseCase)
26
+ usecase.use(**chain_use).chain_to(newcase)
27
+ usecase
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ def chain(usecase = nil, &block)
34
+ @@num_chains += 1
35
+
36
+ msg = "Reached maximum number of chained use cases (#{MAX_CHAINS}). "
37
+ msg << "Looks like a recursive cyclic chain 'use'"
38
+ raise msg if @@num_chains >= MAX_CHAINS
39
+
40
+ msg = "A UseCase can only be chained with another UseCase"
41
+ raise msg if usecase && !usecase.is_a?(UseCase)
42
+
43
+ msg = "Missuse. Please use either parameter or block but not both"
44
+ raise msg if block_given? && usecase
45
+
46
+ usecase = block if block_given?
47
+ @chains.push(usecase)
48
+ self
49
+ end
50
+
51
+ protected
52
+
53
+ def chain_to(usecase)
54
+ msg = "A UseCase can only be chained with another UseCase"
55
+ raise msg if usecase && !usecase.is_a?(UseCase)
56
+
57
+ usecase.chain(self)
58
+ end
59
+
60
+ def resolved_chains(use_group = nil)
61
+ return @resolved_chains if @resolved_chains
62
+
63
+ msg = "Only Eco::API::UseCases object can contain resolved chains. "
64
+ msg << "Given: #{use_group.class}"
65
+ raise msg if use_group && !use_group.is_a?(Eco::API::UseCases)
66
+
67
+ use_group ||= @root
68
+ @resolved_chains = @chains.map do |usecase|
69
+ usecase = usecase.call(use_group) if usecase.respond_to?(:call)
70
+
71
+ msg = "A UseCase can only be chained with another UseCase"
72
+ raise msg if usecase && !usecase.is_a?(UseCase)
73
+
74
+ usecase.resolved_chains(use_group) if usecase.respond_to?(:resolved_chains)
75
+ usecase
76
+ end
77
+ end
78
+
79
+ # INSTANCE METHODS
80
+
81
+ private
82
+
83
+ def reset_chains!
84
+ @chains = []
85
+ @resolved_chains = nil
86
+ end
87
+ end
88
+ end
@@ -3,46 +3,31 @@ module Eco
3
3
  class UseCases
4
4
  # Class that enables to chain multiple UseCase
5
5
  class UseCaseChain < UseCase
6
- @types = UseCase.types
7
- MAX_CHAINS = 70
8
- @@num_chains = 0
6
+ require_relative 'use_case_chain/chaining'
7
+ include Chaining
9
8
 
10
- def initialize(name = nil, type: nil, root:, usecase: nil, &block)
9
+ def initialize(name = nil, root:, type: nil, model: nil, usecase: nil, &block)
11
10
  if usecase
12
- raise "Expected Eco::API::UseCases::UseCase. Given #{usecase.class}" if !usecase.is_a?(Eco::API::UseCases::UseCase)
13
- type = usecase.type
14
- name = usecase.name
15
- block = usecase.callback unless block
11
+ msg = "Expected Eco::API::UseCases::UseCase. "
12
+ msg << "Given #{usecase.class}"
13
+ raise msg unless usecase.is_a?(Eco::API::UseCases::UseCase)
14
+
15
+ type = usecase.type
16
+ name = usecase.name
17
+ block ||= usecase.callback
16
18
  end
17
19
 
18
- super(name, type: type, root: root, &block)
19
- @chains = []
20
- @resolved_chains = nil
20
+ super(name, type: type, model: model, root: root, &block)
21
+
22
+ reset_chains!
21
23
  end
22
24
 
23
25
  def root=(value)
24
- raise "You cannot change root Eco::API::UseCases once the chains have been resolved" if @resolved_chains
25
- super(value)
26
- end
26
+ return super unless @resolved_chains # rubocop:disable Lint/ReturnInVoidContext
27
27
 
28
- def use(preserve_chains: false, recursive: false)
29
- UseCase.new(@name, type: @type, root: @root, &@case).tap do |newcase|
30
- if preserve_chains
31
- chain_use = {preserve_chains: recursive, recursive: recursive}
32
- @chains = @chains.map do |usecase|
33
- if usecase.respond_to? :call
34
- Proc.new do |usegroup|
35
- usecase = usecase.call(usegroup)
36
- usecase.use(chain_use).chain_to(newcase)
37
- usecase
38
- end
39
- elsif usecase.is_a?(UseCase)
40
- usecase.use(chain_use).chain_to(newcase)
41
- usecase
42
- end
43
- end
44
- end
45
- end
28
+ msg = "You cannot change root Eco::API::UseCases "
29
+ msg << "once the chains have been resolved"
30
+ raise msg
46
31
  end
47
32
 
48
33
  # @see Eco::API::UseCases::UseCase#launch
@@ -55,36 +40,6 @@ module Eco
55
40
  end
56
41
  end
57
42
  end
58
-
59
- def chain(usecase = nil, &block)
60
- @@num_chains += 1
61
- raise "Reached maximum number of chained use cases (#{MAX_CHAINS}). Looks like a recursive cyclic chain 'use'" if @@num_chains >= MAX_CHAINS
62
- raise "A UseCase can only be chained with another UseCase" if usecase && !usecase.is_a?(UseCase)
63
- raise "Missuse. Please use either parameter or block but not both" if block_given? && usecase
64
- usecase = block_given?? block : usecase
65
- @chains.push(usecase)
66
- self
67
- end
68
-
69
- protected
70
-
71
- def chain_to(usecase)
72
- raise "A UseCase can only be chained with another UseCase" if usecase && !usecase.is_a?(UseCase)
73
- usecase.chain(self)
74
- end
75
-
76
- def resolved_chains(use_group = nil)
77
- return @resolved_chains if @resolved_chains
78
- raise "Only Eco::API::UseCases object can contain resolved chains. Given: #{use_group.class} " if use_group && !use_group.is_a?(Eco::API::UseCases)
79
-
80
- use_group = use_group || @root
81
- @resolved_chains = @chains.map do |usecase|
82
- usecase = usecase.call(use_group) if usecase.respond_to?(:call)
83
- raise "A UseCase can only be chained with another UseCase" if usecase && !usecase.is_a?(UseCase)
84
- usecase.resolved_chains(use_group) if usecase.respond_to?(:resolved_chains)
85
- usecase
86
- end
87
- end
88
43
  end
89
44
  end
90
45
  end