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.
- checksums.yaml +4 -4
- data/.idea/.gitignore +10 -0
- data/CHANGELOG.md +55 -5
- data/eco-helpers.gemspec +3 -3
- 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/cli.rb +9 -0
- 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/config.rb +1 -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/common/people/default_parsers/xls_parser.rb +1 -1
- data/lib/eco/api/common/session/logger/cache.rb +10 -4
- data/lib/eco/api/common/session/logger/channels.rb +41 -0
- data/lib/eco/api/common/session/logger.rb +9 -0
- 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 +19 -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/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/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 +12 -4
- 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/input.rb +49 -29
- data/lib/eco/cli_default/options.rb +4 -1
- data/lib/eco/cli_default/people.rb +102 -47
- data/lib/eco/cli_default/people_filters.rb +5 -1
- data/lib/eco/cli_default/workflow.rb +149 -138
- data/lib/eco/data/mapper.rb +51 -19
- data/lib/eco/language/auxiliar_logger.rb +16 -3
- data/lib/eco/language/basic_logger.rb +1 -0
- data/lib/eco/language/methods/dsl_able.rb +3 -0
- data/lib/eco/version.rb +1 -1
- metadata +68 -33
- 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
@@ -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
|
-
|
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(
|
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
|
-
|
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
|
-
|
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
|
|
@@ -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
|
-
|
117
|
-
|
118
|
-
|
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
|
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(
|
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
|
@@ -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
|
-
|
37
|
-
|
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
|
@@ -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 =
|
18
|
-
msg <<
|
19
|
-
msg <<
|
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
|
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 <<
|
37
|
+
msg << ' Skipping batch...' unless simulate?
|
38
38
|
log(:info) { msg }
|
39
39
|
|
40
40
|
return
|
@@ -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,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
|
3
|
+
name 'ooze-run-base'
|
4
4
|
type :other
|
5
5
|
|
6
|
-
SAVE_PATCH =
|
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(
|
25
|
-
raise
|
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
|
53
|
+
return unless patch_doc['page'].nil?
|
54
54
|
|
55
|
-
log(:info) {
|
55
|
+
log(:info) { 'No Changes!!' }
|
56
56
|
exit(0)
|
57
57
|
end
|
58
58
|
|
59
59
|
def prompt_to_confirm!
|
60
|
-
micro.prompt_user(
|
61
|
-
exit(1) unless response.upcase.start_with?(
|
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
|
-
|
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
|