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.
- checksums.yaml +4 -4
- data/.idea/.gitignore +10 -0
- data/CHANGELOG.md +44 -2
- data/eco-helpers.gemspec +5 -3
- data/lib/eco/api/common/class_helpers.rb +2 -1
- data/lib/eco/api/common/class_hierarchy.rb +6 -9
- data/lib/eco/api/common/loaders/case_base.rb +12 -4
- data/lib/eco/api/common/loaders/config/workflow/cases_extension.rb +53 -0
- data/lib/eco/api/common/loaders/config/workflow/mailer.rb +2 -14
- data/lib/eco/api/common/loaders/config/workflow.rb +4 -0
- data/lib/eco/api/common/loaders/error_handler.rb +3 -2
- data/lib/eco/api/common/loaders/policy.rb +3 -2
- data/lib/eco/api/common/loaders/use_case/cli_identify.rb +28 -0
- data/lib/eco/api/common/loaders/use_case/target_model.rb +25 -0
- data/lib/eco/api/common/loaders/use_case/type.rb +37 -0
- data/lib/eco/api/common/loaders/use_case.rb +16 -43
- data/lib/eco/api/error/handler.rb +6 -4
- data/lib/eco/api/error/handlers.rb +12 -5
- data/lib/eco/api/microcases/people/apply_changes/set_account/account_excluded.rb +34 -0
- data/lib/eco/api/microcases/people/apply_changes/set_account.rb +28 -0
- data/lib/eco/api/microcases/people/apply_changes/set_core/core_excluded.rb +28 -0
- data/lib/eco/api/microcases/people/apply_changes/set_core.rb +27 -0
- data/lib/eco/api/microcases/people/apply_changes/set_core_with_supervisor.rb +38 -0
- data/lib/eco/api/microcases/people/apply_changes/set_supervisor.rb +69 -0
- data/lib/eco/api/microcases/people/apply_changes.rb +19 -0
- data/lib/eco/api/microcases/people/fetch/with_each.rb +109 -0
- data/lib/eco/api/microcases/people/fetch/with_each_leaver.rb +33 -0
- data/lib/eco/api/microcases/people/fetch/with_each_present.rb +42 -0
- data/lib/eco/api/microcases/people/fetch/with_each_starter.rb +43 -0
- data/lib/eco/api/microcases/people/fetch/with_each_subordinate.rb +41 -0
- data/lib/eco/api/microcases/people/fetch/with_supervisor.rb +46 -0
- data/lib/eco/api/microcases/people/fetch.rb +23 -0
- data/lib/eco/api/microcases/people/integrity/fix_default_group.rb +39 -0
- data/lib/eco/api/microcases/people/integrity/fix_filter_tags.rb +55 -0
- data/lib/eco/api/microcases/people/integrity/refresh_default_tag.rb +32 -0
- data/lib/eco/api/microcases/people/integrity.rb +17 -0
- data/lib/eco/api/microcases/people/macro/take_email.rb +141 -0
- data/lib/eco/api/microcases/people/macro.rb +13 -0
- data/lib/eco/api/microcases/people/manage/cache.rb +36 -0
- data/lib/eco/api/microcases/people/manage/load.rb +90 -0
- data/lib/eco/api/microcases/people/manage/refresh.rb +59 -0
- data/lib/eco/api/microcases/people/manage/search.rb +118 -0
- data/lib/eco/api/microcases/people/manage.rb +19 -0
- data/lib/eco/api/microcases/people/preserve/default_tag.rb +29 -0
- data/lib/eco/api/microcases/people/preserve/filter_tags.rb +34 -0
- data/lib/eco/api/microcases/people/preserve/policy_groups.rb +36 -0
- data/lib/eco/api/microcases/people/preserve.rb +17 -0
- data/lib/eco/api/microcases/people.rb +21 -0
- data/lib/eco/api/microcases/person_update.rb +1 -1
- data/lib/eco/api/microcases/s3upload_targets.rb +1 -1
- data/lib/eco/api/microcases/with_each_contractor_present.rb +40 -0
- data/lib/eco/api/microcases.rb +3 -23
- data/lib/eco/api/organization/people/multiple_search_results.rb +48 -0
- data/lib/eco/api/organization/{people_similarity.rb → people/similarity.rb} +89 -72
- data/lib/eco/api/organization/people.rb +40 -66
- data/lib/eco/api/organization.rb +0 -1
- data/lib/eco/api/policies/policy.rb +7 -5
- data/lib/eco/api/policies.rb +9 -4
- data/lib/eco/api/session/batch/feedback/generate.rb +60 -0
- data/lib/eco/api/session/batch/feedback/getters.rb +28 -0
- data/lib/eco/api/session/batch/feedback/identifiers.rb +20 -0
- data/lib/eco/api/session/batch/feedback/job_dependencies.rb +45 -0
- data/lib/eco/api/session/batch/feedback/request_stat.rb +27 -0
- data/lib/eco/api/session/batch/feedback/request_stats.rb +270 -0
- data/lib/eco/api/session/batch/feedback.rb +45 -119
- data/lib/eco/api/session/batch/job/sets.rb +23 -0
- data/lib/eco/api/session/batch/job/type.rb +22 -0
- data/lib/eco/api/session/batch/job.rb +8 -18
- data/lib/eco/api/session/batch/jobs.rb +6 -2
- data/lib/eco/api/session/batch/launcher/mode_size.rb +1 -1
- data/lib/eco/api/session/batch/launcher/retry.rb +4 -4
- data/lib/eco/api/session/batch/launcher.rb +2 -2
- data/lib/eco/api/session/batch/policies.rb +4 -4
- data/lib/eco/api/session/batch/searcher.rb +2 -1
- data/lib/eco/api/session/batch.rb +0 -1
- data/lib/eco/api/session/config/workflow.rb +19 -9
- data/lib/eco/api/usecases/base_case/model.rb +54 -0
- data/lib/eco/api/usecases/base_case/type.rb +52 -0
- data/lib/eco/api/usecases/base_case.rb +5 -29
- data/lib/eco/api/usecases/base_io/chaining.rb +48 -0
- data/lib/eco/api/usecases/base_io/validations.rb +114 -0
- data/lib/eco/api/usecases/base_io.rb +65 -115
- data/lib/eco/api/usecases/cli/dsl.rb +3 -1
- data/lib/eco/api/usecases/default/people/treat/analyse_people_case.rb +7 -4
- data/lib/eco/api/usecases/default/people/treat/supers_cyclic_identify_case.rb +1 -3
- data/lib/eco/api/usecases/default/people/treat/supers_hierarchy_case.rb +1 -5
- data/lib/eco/api/usecases/default_cases/entries_to_csv_case.rb +2 -2
- data/lib/eco/api/usecases/default_cases/hris_case.rb +0 -2
- data/lib/eco/api/usecases/default_cases/samples/sftp.rb +3 -0
- data/lib/eco/api/usecases/default_cases/samples.rb +1 -1
- data/lib/eco/api/usecases/default_cases/to_csv_case.rb +3 -6
- data/lib/eco/api/usecases/graphql/base.rb +3 -2
- data/lib/eco/api/usecases/graphql/helpers/base/case_env.rb +1 -1
- data/lib/eco/api/usecases/graphql/helpers/base/error_handling.rb +3 -3
- data/lib/eco/api/usecases/graphql/helpers/contractors/base/load.rb +17 -0
- data/lib/eco/api/usecases/graphql/helpers/contractors/base.rb +8 -0
- data/lib/eco/api/usecases/graphql/helpers/contractors.rb +6 -0
- data/lib/eco/api/usecases/graphql/helpers/location/base.rb +5 -4
- data/lib/eco/api/usecases/graphql/helpers/location/command.rb +2 -2
- data/lib/eco/api/usecases/graphql/helpers.rb +1 -0
- data/lib/eco/api/usecases/graphql/samples/contractors/dsl.rb +5 -0
- data/lib/eco/api/usecases/graphql/samples/contractors.rb +17 -0
- data/lib/eco/api/usecases/graphql/samples/location/service/base.rb +1 -1
- data/lib/eco/api/usecases/graphql/samples/location.rb +1 -1
- data/lib/eco/api/usecases/graphql/samples.rb +1 -0
- data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +0 -1
- data/lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb +8 -8
- data/lib/eco/api/usecases/{default_cases/samples → samples/drivers}/cli/sftp_cli.rb +1 -1
- data/lib/eco/api/usecases/samples/drivers/cli/url_pull_cli.rb +15 -0
- data/lib/eco/api/usecases/{default_cases/samples/sftp_case.rb → samples/drivers/sftp_sample.rb} +8 -8
- data/lib/eco/api/usecases/samples/drivers/url_pull_sample.rb +110 -0
- data/lib/eco/api/usecases/samples/drivers.rb +13 -0
- data/lib/eco/api/usecases/samples.rb +11 -0
- data/lib/eco/api/usecases/use_case/chainer.rb +12 -0
- data/lib/eco/api/usecases/use_case.rb +32 -23
- data/lib/eco/api/usecases/use_case_chain/chaining.rb +88 -0
- data/lib/eco/api/usecases/use_case_chain.rb +17 -62
- data/lib/eco/api/usecases/use_case_io/chain.rb +24 -0
- data/lib/eco/api/usecases/use_case_io.rb +17 -22
- data/lib/eco/api/usecases.rb +15 -6
- data/lib/eco/assets.rb +1 -1
- data/lib/eco/cli/config/filters/people_filters.rb +6 -5
- data/lib/eco/cli/config/input.rb +6 -2
- data/lib/eco/cli/config/use_cases.rb +4 -2
- data/lib/eco/cli_default/people_filters.rb +1 -0
- data/lib/eco/cli_default/workflow.rb +149 -138
- data/lib/eco/data/mapper.rb +51 -19
- data/lib/eco/language/methods/dsl_able.rb +10 -0
- data/lib/eco/version.rb +1 -1
- metadata +87 -35
- data/lib/eco/api/microcases/account_excluded.rb +0 -26
- data/lib/eco/api/microcases/core_excluded.rb +0 -20
- data/lib/eco/api/microcases/fix_default_group.rb +0 -33
- data/lib/eco/api/microcases/fix_filter_tags.rb +0 -49
- data/lib/eco/api/microcases/people_cache.rb +0 -30
- data/lib/eco/api/microcases/people_load.rb +0 -84
- data/lib/eco/api/microcases/people_refresh.rb +0 -53
- data/lib/eco/api/microcases/people_search.rb +0 -112
- data/lib/eco/api/microcases/preserve_default_tag.rb +0 -23
- data/lib/eco/api/microcases/preserve_filter_tags.rb +0 -28
- data/lib/eco/api/microcases/preserve_policy_groups.rb +0 -30
- data/lib/eco/api/microcases/refresh_default_tag.rb +0 -26
- data/lib/eco/api/microcases/set_account.rb +0 -18
- data/lib/eco/api/microcases/set_core.rb +0 -17
- data/lib/eco/api/microcases/set_core_with_supervisor.rb +0 -32
- data/lib/eco/api/microcases/set_supervisor.rb +0 -63
- data/lib/eco/api/microcases/take_email_from_account.rb +0 -129
- data/lib/eco/api/microcases/with_each.rb +0 -103
- data/lib/eco/api/microcases/with_each_leaver.rb +0 -27
- data/lib/eco/api/microcases/with_each_present.rb +0 -36
- data/lib/eco/api/microcases/with_each_starter.rb +0 -37
- data/lib/eco/api/microcases/with_each_subordinate.rb +0 -33
- data/lib/eco/api/microcases/with_supervisor.rb +0 -35
- 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
|
-
|
5
|
+
require_relative 'use_case/chainer'
|
6
|
+
include Chainer
|
6
7
|
|
7
|
-
attr_reader :name, :type, :
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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 [
|
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
|
98
|
-
sess
|
99
|
-
|
100
|
-
ent
|
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
|
108
|
-
@
|
109
|
-
singleton_class.attr_reader(:
|
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
|
-
|
7
|
-
|
8
|
-
@@num_chains = 0
|
6
|
+
require_relative 'use_case_chain/chaining'
|
7
|
+
include Chaining
|
9
8
|
|
10
|
-
def initialize(name = nil, type: nil,
|
9
|
+
def initialize(name = nil, root:, type: nil, model: nil, usecase: nil, &block)
|
11
10
|
if usecase
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
20
|
-
|
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
|
-
|
25
|
-
super(value)
|
26
|
-
end
|
26
|
+
return super unless @resolved_chains # rubocop:disable Lint/ReturnInVoidContext
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
44
|
-
raise "Can't modify
|
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
|
data/lib/eco/api/usecases.rb
CHANGED
@@ -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(
|
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
|
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
|
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
@@ -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
|
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
|
-
|
20
|
-
|
21
|
-
|
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
|
data/lib/eco/cli/config/input.rb
CHANGED
@@ -17,8 +17,12 @@ module Eco
|
|
17
17
|
|
18
18
|
def define(option: nil, &block)
|
19
19
|
option ||= default_option
|
20
|
-
|
21
|
-
|
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
|
-
|
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
|