eco-helpers 3.0.21 → 3.0.23

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 (154) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/.gitignore +10 -0
  3. data/CHANGELOG.md +44 -2
  4. data/eco-helpers.gemspec +5 -3
  5. data/lib/eco/api/common/class_helpers.rb +2 -1
  6. data/lib/eco/api/common/class_hierarchy.rb +6 -9
  7. data/lib/eco/api/common/loaders/case_base.rb +12 -4
  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/error_handler.rb +3 -2
  12. data/lib/eco/api/common/loaders/policy.rb +3 -2
  13. data/lib/eco/api/common/loaders/use_case/cli_identify.rb +28 -0
  14. data/lib/eco/api/common/loaders/use_case/target_model.rb +25 -0
  15. data/lib/eco/api/common/loaders/use_case/type.rb +37 -0
  16. data/lib/eco/api/common/loaders/use_case.rb +16 -43
  17. data/lib/eco/api/error/handler.rb +6 -4
  18. data/lib/eco/api/error/handlers.rb +12 -5
  19. data/lib/eco/api/microcases/people/apply_changes/set_account/account_excluded.rb +34 -0
  20. data/lib/eco/api/microcases/people/apply_changes/set_account.rb +28 -0
  21. data/lib/eco/api/microcases/people/apply_changes/set_core/core_excluded.rb +28 -0
  22. data/lib/eco/api/microcases/people/apply_changes/set_core.rb +27 -0
  23. data/lib/eco/api/microcases/people/apply_changes/set_core_with_supervisor.rb +38 -0
  24. data/lib/eco/api/microcases/people/apply_changes/set_supervisor.rb +69 -0
  25. data/lib/eco/api/microcases/people/apply_changes.rb +19 -0
  26. data/lib/eco/api/microcases/people/fetch/with_each.rb +109 -0
  27. data/lib/eco/api/microcases/people/fetch/with_each_leaver.rb +33 -0
  28. data/lib/eco/api/microcases/people/fetch/with_each_present.rb +42 -0
  29. data/lib/eco/api/microcases/people/fetch/with_each_starter.rb +43 -0
  30. data/lib/eco/api/microcases/people/fetch/with_each_subordinate.rb +41 -0
  31. data/lib/eco/api/microcases/people/fetch/with_supervisor.rb +46 -0
  32. data/lib/eco/api/microcases/people/fetch.rb +23 -0
  33. data/lib/eco/api/microcases/people/integrity/fix_default_group.rb +39 -0
  34. data/lib/eco/api/microcases/people/integrity/fix_filter_tags.rb +55 -0
  35. data/lib/eco/api/microcases/people/integrity/refresh_default_tag.rb +32 -0
  36. data/lib/eco/api/microcases/people/integrity.rb +17 -0
  37. data/lib/eco/api/microcases/people/macro/take_email.rb +141 -0
  38. data/lib/eco/api/microcases/people/macro.rb +13 -0
  39. data/lib/eco/api/microcases/people/manage/cache.rb +36 -0
  40. data/lib/eco/api/microcases/people/manage/load.rb +90 -0
  41. data/lib/eco/api/microcases/people/manage/refresh.rb +59 -0
  42. data/lib/eco/api/microcases/people/manage/search.rb +118 -0
  43. data/lib/eco/api/microcases/people/manage.rb +19 -0
  44. data/lib/eco/api/microcases/people/preserve/default_tag.rb +29 -0
  45. data/lib/eco/api/microcases/people/preserve/filter_tags.rb +34 -0
  46. data/lib/eco/api/microcases/people/preserve/policy_groups.rb +36 -0
  47. data/lib/eco/api/microcases/people/preserve.rb +17 -0
  48. data/lib/eco/api/microcases/people.rb +21 -0
  49. data/lib/eco/api/microcases/person_update.rb +1 -1
  50. data/lib/eco/api/microcases/s3upload_targets.rb +1 -1
  51. data/lib/eco/api/microcases/with_each_contractor_present.rb +40 -0
  52. data/lib/eco/api/microcases.rb +3 -23
  53. data/lib/eco/api/organization/people/multiple_search_results.rb +48 -0
  54. data/lib/eco/api/organization/{people_similarity.rb → people/similarity.rb} +89 -72
  55. data/lib/eco/api/organization/people.rb +40 -66
  56. data/lib/eco/api/organization.rb +0 -1
  57. data/lib/eco/api/policies/policy.rb +7 -5
  58. data/lib/eco/api/policies.rb +9 -4
  59. data/lib/eco/api/session/batch/feedback/generate.rb +60 -0
  60. data/lib/eco/api/session/batch/feedback/getters.rb +28 -0
  61. data/lib/eco/api/session/batch/feedback/identifiers.rb +20 -0
  62. data/lib/eco/api/session/batch/feedback/job_dependencies.rb +45 -0
  63. data/lib/eco/api/session/batch/feedback/request_stat.rb +27 -0
  64. data/lib/eco/api/session/batch/feedback/request_stats.rb +270 -0
  65. data/lib/eco/api/session/batch/feedback.rb +45 -119
  66. data/lib/eco/api/session/batch/job/sets.rb +23 -0
  67. data/lib/eco/api/session/batch/job/type.rb +22 -0
  68. data/lib/eco/api/session/batch/job.rb +8 -18
  69. data/lib/eco/api/session/batch/jobs.rb +6 -2
  70. data/lib/eco/api/session/batch/launcher/mode_size.rb +1 -1
  71. data/lib/eco/api/session/batch/launcher/retry.rb +4 -4
  72. data/lib/eco/api/session/batch/launcher.rb +2 -2
  73. data/lib/eco/api/session/batch/policies.rb +4 -4
  74. data/lib/eco/api/session/batch/searcher.rb +2 -1
  75. data/lib/eco/api/session/batch.rb +0 -1
  76. data/lib/eco/api/session/config/workflow.rb +19 -9
  77. data/lib/eco/api/usecases/base_case/model.rb +54 -0
  78. data/lib/eco/api/usecases/base_case/type.rb +52 -0
  79. data/lib/eco/api/usecases/base_case.rb +5 -29
  80. data/lib/eco/api/usecases/base_io/chaining.rb +48 -0
  81. data/lib/eco/api/usecases/base_io/validations.rb +114 -0
  82. data/lib/eco/api/usecases/base_io.rb +65 -115
  83. data/lib/eco/api/usecases/cli/dsl.rb +3 -1
  84. data/lib/eco/api/usecases/default/people/treat/analyse_people_case.rb +7 -4
  85. data/lib/eco/api/usecases/default/people/treat/supers_cyclic_identify_case.rb +1 -3
  86. data/lib/eco/api/usecases/default/people/treat/supers_hierarchy_case.rb +1 -5
  87. data/lib/eco/api/usecases/default_cases/entries_to_csv_case.rb +2 -2
  88. data/lib/eco/api/usecases/default_cases/hris_case.rb +0 -2
  89. data/lib/eco/api/usecases/default_cases/samples/sftp.rb +3 -0
  90. data/lib/eco/api/usecases/default_cases/samples.rb +1 -1
  91. data/lib/eco/api/usecases/default_cases/to_csv_case.rb +3 -6
  92. data/lib/eco/api/usecases/graphql/base.rb +3 -2
  93. data/lib/eco/api/usecases/graphql/helpers/base/case_env.rb +1 -1
  94. data/lib/eco/api/usecases/graphql/helpers/base/error_handling.rb +3 -3
  95. data/lib/eco/api/usecases/graphql/helpers/contractors/base/load.rb +17 -0
  96. data/lib/eco/api/usecases/graphql/helpers/contractors/base.rb +8 -0
  97. data/lib/eco/api/usecases/graphql/helpers/contractors.rb +6 -0
  98. data/lib/eco/api/usecases/graphql/helpers/location/base.rb +5 -4
  99. data/lib/eco/api/usecases/graphql/helpers/location/command.rb +2 -2
  100. data/lib/eco/api/usecases/graphql/helpers.rb +1 -0
  101. data/lib/eco/api/usecases/graphql/samples/contractors/dsl.rb +5 -0
  102. data/lib/eco/api/usecases/graphql/samples/contractors.rb +17 -0
  103. data/lib/eco/api/usecases/graphql/samples/location/service/base.rb +1 -1
  104. data/lib/eco/api/usecases/graphql/samples/location.rb +1 -1
  105. data/lib/eco/api/usecases/graphql/samples.rb +1 -0
  106. data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +0 -1
  107. data/lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb +8 -8
  108. data/lib/eco/api/usecases/{default_cases/samples → samples/drivers}/cli/sftp_cli.rb +1 -1
  109. data/lib/eco/api/usecases/samples/drivers/cli/url_pull_cli.rb +15 -0
  110. data/lib/eco/api/usecases/{default_cases/samples/sftp_case.rb → samples/drivers/sftp_sample.rb} +8 -8
  111. data/lib/eco/api/usecases/samples/drivers/url_pull_sample.rb +110 -0
  112. data/lib/eco/api/usecases/samples/drivers.rb +13 -0
  113. data/lib/eco/api/usecases/samples.rb +11 -0
  114. data/lib/eco/api/usecases/use_case/chainer.rb +12 -0
  115. data/lib/eco/api/usecases/use_case.rb +32 -23
  116. data/lib/eco/api/usecases/use_case_chain/chaining.rb +88 -0
  117. data/lib/eco/api/usecases/use_case_chain.rb +17 -62
  118. data/lib/eco/api/usecases/use_case_io/chain.rb +24 -0
  119. data/lib/eco/api/usecases/use_case_io.rb +17 -22
  120. data/lib/eco/api/usecases.rb +15 -6
  121. data/lib/eco/assets.rb +1 -1
  122. data/lib/eco/cli/config/filters/people_filters.rb +6 -5
  123. data/lib/eco/cli/config/input.rb +6 -2
  124. data/lib/eco/cli/config/use_cases.rb +4 -2
  125. data/lib/eco/cli_default/people_filters.rb +1 -0
  126. data/lib/eco/cli_default/workflow.rb +149 -138
  127. data/lib/eco/data/mapper.rb +51 -19
  128. data/lib/eco/language/methods/dsl_able.rb +10 -0
  129. data/lib/eco/version.rb +1 -1
  130. metadata +87 -35
  131. data/lib/eco/api/microcases/account_excluded.rb +0 -26
  132. data/lib/eco/api/microcases/core_excluded.rb +0 -20
  133. data/lib/eco/api/microcases/fix_default_group.rb +0 -33
  134. data/lib/eco/api/microcases/fix_filter_tags.rb +0 -49
  135. data/lib/eco/api/microcases/people_cache.rb +0 -30
  136. data/lib/eco/api/microcases/people_load.rb +0 -84
  137. data/lib/eco/api/microcases/people_refresh.rb +0 -53
  138. data/lib/eco/api/microcases/people_search.rb +0 -112
  139. data/lib/eco/api/microcases/preserve_default_tag.rb +0 -23
  140. data/lib/eco/api/microcases/preserve_filter_tags.rb +0 -28
  141. data/lib/eco/api/microcases/preserve_policy_groups.rb +0 -30
  142. data/lib/eco/api/microcases/refresh_default_tag.rb +0 -26
  143. data/lib/eco/api/microcases/set_account.rb +0 -18
  144. data/lib/eco/api/microcases/set_core.rb +0 -17
  145. data/lib/eco/api/microcases/set_core_with_supervisor.rb +0 -32
  146. data/lib/eco/api/microcases/set_supervisor.rb +0 -63
  147. data/lib/eco/api/microcases/take_email_from_account.rb +0 -129
  148. data/lib/eco/api/microcases/with_each.rb +0 -103
  149. data/lib/eco/api/microcases/with_each_leaver.rb +0 -27
  150. data/lib/eco/api/microcases/with_each_present.rb +0 -36
  151. data/lib/eco/api/microcases/with_each_starter.rb +0 -37
  152. data/lib/eco/api/microcases/with_each_subordinate.rb +0 -33
  153. data/lib/eco/api/microcases/with_supervisor.rb +0 -35
  154. data/lib/eco/api/session/batch/request_stats.rb +0 -266
@@ -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
@@ -0,0 +1,24 @@
1
+ class Eco::API::UseCases::UseCaseIO
2
+ module Chain
3
+ def chain(usecase:)
4
+ msg = "It should be a Eco::API::UseCases::UseCase. Given: #{usecase.class}"
5
+ raise ArgumentError, msg unless usecase.is_a?(Eco::API::UseCases::UseCase)
6
+
7
+ #aux_io = self.class.new(input: input, data: data, session: session, options: options, usecase: usecase)
8
+ #kargs = aux_io.params(keyed: true)
9
+ kargs = params(keyed: true, all: true).merge(usecase: usecase)
10
+ kargs.delete(:job)
11
+
12
+ case type
13
+ when :import
14
+ kargs[:input] = output
15
+ when :filter
16
+ kargs[:data] = output
17
+ when :transform, :sync, :export, :error_handler, :other
18
+ # no redirections => should it redirect the input?
19
+ end
20
+
21
+ self.class.new(**kargs)
22
+ end
23
+ end
24
+ end
@@ -7,7 +7,8 @@ module Eco
7
7
  # - provides a helper to `chain` InputOutput between usecases
8
8
  # @attr_reader usecase [Eco::API::UseCases::UseCase] the usecase this InputOuput is linked to
9
9
  class UseCaseIO < BaseIO
10
- @types = BaseIO.types
10
+ require_relative 'use_case_io/chain'
11
+ include Chain
11
12
 
12
13
  attr_reader :usecase
13
14
 
@@ -31,17 +32,28 @@ module Eco
31
32
 
32
33
  # @param value [Eco::API::UseCases::UseCase] the usecase this InputOuput should be linked to
33
34
  def usecase=(value)
34
- raise "It should be a Eco::API::UseCases::UseCase. Given: #{value}" if !value.is_a?(Eco::API::UseCases::UseCase)
35
+ msg = "It should be a Eco::API::UseCases::UseCase. Given: #{value}"
36
+ raise ArgumentError, msg unless value.is_a?(Eco::API::UseCases::UseCase)
37
+
35
38
  @usecase = value
36
39
  end
37
40
 
38
41
  # @return [Symbol] the `type` of the UseCase this InputOuput is linked to
39
42
  def type
40
- @usecase.type
43
+ usecase.type
44
+ end
45
+
46
+ # @return [Symbol] the `model` of the UseCase this InputOuput is linked to
47
+ def model
48
+ usecase.model
49
+ end
50
+
51
+ def type=(_value)
52
+ raise "Can't modify type: depends on the usecase linked to this IO object"
41
53
  end
42
54
 
43
- def type=(value)
44
- raise "Can't modify type depends on the usecase linked to this IO object"
55
+ def model=(_value)
56
+ raise "Can't modify model: depends on the usecase linked to this IO object"
45
57
  end
46
58
 
47
59
  # @see Eco::API::UseCases::BaseIO#params
@@ -57,23 +69,6 @@ module Eco
57
69
  end
58
70
  end
59
71
  end
60
-
61
- def chain(usecase:)
62
- raise "It should be a UseCase. Given: #{usecase}" if !usecase.is_a?(UseCase)
63
- #aux_io = self.class.new(input: input, people: people, session: session, options: options, usecase: usecase)
64
- #kargs = aux_io.params(keyed: true)
65
- kargs = params(keyed: true, all: true).merge(usecase: usecase)
66
- kargs.delete(:job)
67
- case self.type
68
- when :import
69
- kargs[:input] = output
70
- when :filter
71
- kargs[:people] = output
72
- when :transform, :sync, :export, :error_handler, :other
73
- # no redirections => should it redirect the input?
74
- end
75
- self.class.new(**kargs)
76
- end
77
72
  end
78
73
  end
79
74
  end
@@ -42,6 +42,7 @@ module Eco
42
42
 
43
43
  def each(&block)
44
44
  return to_enum(:each) unless block
45
+
45
46
  items.each(&block)
46
47
  end
47
48
 
@@ -59,8 +60,14 @@ module Eco
59
60
  end
60
61
 
61
62
  # @return [Eco::API::UseCases::UseCase] the `name` usecase of type `type` with the defined `block`.
62
- def define(name, type:, &block)
63
- Eco::API::UseCases::UseCase.new(name, type: type, root: self, &block).tap do |usecase|
63
+ def define(name, type:, model: nil, &block)
64
+ Eco::API::UseCases::UseCase.new(
65
+ name,
66
+ type: type,
67
+ model: model,
68
+ root: self,
69
+ &block
70
+ ).tap do |usecase|
64
71
  add(usecase)
65
72
  end
66
73
  end
@@ -69,11 +76,12 @@ module Eco
69
76
  # @param usecase [Eco::API::UseCases::UseCase] the usecase to be added.
70
77
  def add(usecase)
71
78
  msg = "Expected Eco::API::UseCases::UseCase object. Given: #{usecase.class}"
72
- raise ArgumentError, msg if !usecase || !usecase.is_a?(Eco::API::UseCases::UseCase)
79
+ raise ArgumentError, msg unless usecase.is_a?(Eco::API::UseCases::UseCase)
73
80
 
74
81
  name = usecase.name
75
82
  type = usecase.type
76
83
  puts "Warning: overriding '#{type}' case #{name}" if self.defined?(name, type: type)
84
+
77
85
  to_h[key(name, type)] = usecase
78
86
  @cache_init = false
79
87
  usecase
@@ -107,7 +115,7 @@ module Eco
107
115
  end
108
116
 
109
117
  def types(name)
110
- return nil unless name?(name)
118
+ return unless name?(name)
111
119
 
112
120
  by_name[name].map(&:type)
113
121
  end
@@ -168,8 +176,9 @@ require_relative 'usecases/use_case_chain'
168
176
  require_relative 'usecases/base_io'
169
177
  require_relative 'usecases/use_case_io'
170
178
  require_relative 'usecases/cli'
171
- require_relative 'usecases/default_cases'
172
179
  require_relative 'usecases/graphql'
180
+ require_relative 'usecases/default'
181
+ require_relative 'usecases/samples'
182
+ require_relative 'usecases/default_cases' # legacy
173
183
  require_relative 'usecases/ooze_samples'
174
184
  require_relative 'usecases/ooze_cases'
175
- require_relative 'usecases/default'
data/lib/eco/assets.rb CHANGED
@@ -32,7 +32,7 @@ module Eco
32
32
  @configs ||= {}
33
33
  end
34
34
 
35
- def cli(&block)
35
+ def cli
36
36
  unless @cli_init
37
37
  @cli_init = true
38
38
  require_relative('cli_default')
@@ -3,23 +3,24 @@ module Eco
3
3
  class Config
4
4
  class Filters
5
5
  class PeopleFilters < Eco::CLI::Config::Filters
6
-
7
6
  def help(refine: nil)
8
7
  refinement = refine.is_a?(String)? " (containing: '#{refine}')" : ""
9
8
  super("The following are the available filters on people#{refinement}:", refine: refine)
10
9
  end
11
10
 
12
11
  def process(io:)
13
- unless io && io.is_a?(Eco::API::UseCases::BaseIO)
12
+ unless io.is_a?(Eco::API::UseCases::BaseIO)
14
13
  raise "You need to provide Eco::API::UseCases::BaseIO object. Given: #{io.class}"
15
14
  end
16
15
 
17
16
  io = io.new(type: :transform)
17
+
18
18
  @filters.each do |arg, callback|
19
- if SCR.get_arg(arg)
20
- io = io.new(people: callback.call(*io.params))
21
- end
19
+ next unless SCR.get_arg(arg)
20
+
21
+ io = io.new(data: callback.call(*io.params))
22
22
  end
23
+
23
24
  io.people
24
25
  end
25
26
  end
@@ -17,8 +17,12 @@ module Eco
17
17
 
18
18
  def define(option: nil, &block)
19
19
  option ||= default_option
20
- raise "Missing option to identify the input (no default defined)" unless !!option
21
- raise "Missing block to define the input obtention process" unless block
20
+
21
+ msg = "Missing option to identify the input (no default defined)"
22
+ raise ArgumentError, msg unless option
23
+
24
+ msg = "Missing block to define the input obtention process"
25
+ raise ArgumentError, msg unless block_given?
22
26
 
23
27
  @callbacks[option] = block
24
28
  end
@@ -57,7 +57,7 @@ module Eco
57
57
  # @param desc [String] description of the case.
58
58
  # @param case_name [String, nil] the name of the usecase as defined.
59
59
  def add(option_case, type, desc = nil, case_name: nil, &callback)
60
- Eco::API::UseCases::UseCase.validate_type(type)
60
+ Eco::API::UseCases::UseCase.validate_type!(type)
61
61
 
62
62
  unless block_given?
63
63
  raise "You must specify a valid 'case_name' when no block is provided" unless case_name
@@ -154,7 +154,9 @@ module Eco
154
154
  def validate_io!(io)
155
155
  return if io.is_a?(Eco::API::UseCases::BaseIO)
156
156
 
157
- raise ArgumentError, "You need to provide Eco::API::UseCases::BaseIO object. Given: #{io.class}"
157
+ msg = "You need to provide Eco::API::UseCases::BaseIO object. "
158
+ msg << "Given: #{io.class}"
159
+ raise ArgumentError, msg
158
160
  end
159
161
  end
160
162
  end
@@ -111,6 +111,7 @@ ASSETS.cli.config do |cnf| # rubocop:disable Metrics/BlockLength
111
111
  session.log(:info) {
112
112
  "Filtered #{filtered.count} people out of #{people.count} total"
113
113
  }
114
+
114
115
  people.newFrom filtered
115
116
  end
116
117
  end