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
@@ -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,15 @@
|
|
1
|
+
class Eco::API::UseCases::Samples::Drivers::UrlPull
|
2
|
+
class Cli < Eco::API::UseCases::Cli
|
3
|
+
desc "Url Pull sample: pull the file from a specific URL"
|
4
|
+
|
5
|
+
add_option("-target-url-const", "Constant that should be used as a pattern") do |options|
|
6
|
+
url_const = SCR.get_arg("-target-url-const", with_param: true)
|
7
|
+
options.deep_merge!(url_pull: {target_url_const: url_const})
|
8
|
+
end
|
9
|
+
|
10
|
+
add_option("-local-folder", "Local folder to pull the remote files to.") do |options|
|
11
|
+
local_folder = SCR.get_file("-local-folder", required: true, should_exist: true)
|
12
|
+
options.deep_merge!(url_pull: {local_folder: local_folder})
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/eco/api/usecases/{default_cases/samples/sftp_case.rb → samples/drivers/sftp_sample.rb}
RENAMED
@@ -1,17 +1,17 @@
|
|
1
1
|
# rubocop:disable Naming/AccessorMethodName
|
2
|
-
class Eco::API::UseCases::
|
2
|
+
class Eco::API::UseCases::Samples::Drivers::Sftp < Eco::API::Common::Loaders::UseCase
|
3
3
|
class WrongConst < ArgumentError; end
|
4
4
|
class MissRemoteFolder < ArgumentError; end
|
5
5
|
|
6
6
|
require_relative 'cli/sftp_cli'
|
7
|
-
name
|
7
|
+
name 'sftp'
|
8
8
|
type :other
|
9
9
|
|
10
10
|
CONST_REFERRAL = /^(?:::)?(?:[A-Z][a-zA-Z0-9_]*(?:::[A-Z][a-zA-Z0-9_]*)*)$/
|
11
11
|
|
12
12
|
def main(session, options, _usecase)
|
13
13
|
options[:end_get] = false
|
14
|
-
raise
|
14
|
+
raise 'The SFTP is not configured' unless session.sftp?
|
15
15
|
|
16
16
|
case options.dig(:sftp, :command)
|
17
17
|
when :list
|
@@ -34,7 +34,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
|
|
34
34
|
return unless require
|
35
35
|
|
36
36
|
msg = "(#{self.class}) You should redefine the file_pattern function "
|
37
|
-
msg <<
|
37
|
+
msg << 'as a RegEx expression that matches the target remote file'
|
38
38
|
raise WrongConst, msg
|
39
39
|
end
|
40
40
|
|
@@ -52,7 +52,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
|
|
52
52
|
raise WrongConst, "(#{self.class}) Unknown constant: #{fpc}"
|
53
53
|
end
|
54
54
|
|
55
|
-
# Ex:
|
55
|
+
# Ex: '/IN/Personnel'
|
56
56
|
def remote_subfolder(require: true)
|
57
57
|
rm_sf = options.dig(:sftp, :remote_subfolder)
|
58
58
|
|
@@ -60,7 +60,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
|
|
60
60
|
return unless require
|
61
61
|
|
62
62
|
msg = "(#{self.class}) You should redefine remote_subfolder "
|
63
|
-
msg <<
|
63
|
+
msg << 'as the folder where the target file sits. Ex: /IN/Personnel'
|
64
64
|
raise MissRemoteFolder, msg
|
65
65
|
end
|
66
66
|
|
@@ -77,7 +77,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def local_folder
|
80
|
-
options.dig(:sftp, :local_folder) ||
|
80
|
+
options.dig(:sftp, :local_folder) || '.'
|
81
81
|
end
|
82
82
|
|
83
83
|
def with_remote_files(folder: remote_folder, pattern: file_pattern)
|
@@ -147,7 +147,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
|
|
147
147
|
end
|
148
148
|
|
149
149
|
def archive_subfolder
|
150
|
-
|
150
|
+
'Archive'
|
151
151
|
end
|
152
152
|
|
153
153
|
def sftp_config
|
@@ -0,0 +1,110 @@
|
|
1
|
+
class Eco::API::UseCases::Samples::Drivers::UrlPull < Eco::API::Common::Loaders::UseCase
|
2
|
+
class WrongConst < ArgumentError; end
|
3
|
+
# class MissRemoteFolder < ArgumentError; end
|
4
|
+
|
5
|
+
require_relative 'cli/url_pull_cli'
|
6
|
+
name 'url-pull'
|
7
|
+
type :other
|
8
|
+
|
9
|
+
CONST_REFERRAL = /^(?:::)?(?:[A-Z][a-zA-Z0-9_]*(?:::[A-Z][a-zA-Z0-9_]*)*)$/
|
10
|
+
|
11
|
+
def main(*_args)
|
12
|
+
options[:end_get] = false
|
13
|
+
require_dependencies
|
14
|
+
|
15
|
+
if (response = get(URI(target_url), **auth_params))
|
16
|
+
to_csv(response.body, out_filename)
|
17
|
+
else
|
18
|
+
log(:error) { "Could not pull from url: #{target_url}" }
|
19
|
+
exit 1
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def require_dependencies
|
26
|
+
require 'net/http'
|
27
|
+
require 'uri'
|
28
|
+
require 'csv'
|
29
|
+
# require 'dotenv/load'
|
30
|
+
end
|
31
|
+
|
32
|
+
# Override this method to obtain authentication
|
33
|
+
# i.e. { user: ENV['KEY']}
|
34
|
+
def auth_params
|
35
|
+
{}
|
36
|
+
end
|
37
|
+
|
38
|
+
def get(uri, **kargs)
|
39
|
+
base_request(uri, **kargs) do |request|
|
40
|
+
http_start(uri) do |http|
|
41
|
+
puts "Pulling from url: #{uri}"
|
42
|
+
return http.request(request)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_csv(plain_data, filename)
|
48
|
+
data = CSV.parse(plain_data)
|
49
|
+
|
50
|
+
CSV.open(filename, 'w') do |csv|
|
51
|
+
data.each do |line|
|
52
|
+
csv << line
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
log(:info) { "Generated output file: #{filename}" }
|
57
|
+
end
|
58
|
+
|
59
|
+
def request_options(uri)
|
60
|
+
{
|
61
|
+
use_ssl: uri.scheme == 'https'
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
def http_start(uri, &block)
|
66
|
+
Net::HTTP.start(uri.hostname, uri.port, request_options(uri), &block)
|
67
|
+
end
|
68
|
+
|
69
|
+
def base_request(uri, user: nil, pass: '')
|
70
|
+
Net::HTTP::Get.new(uri).tap do |request|
|
71
|
+
request.basic_auth(user, pass) unless user.nil?
|
72
|
+
yield(request)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def out_filename
|
77
|
+
File.join(local_folder, "#{file_basename}.csv")
|
78
|
+
end
|
79
|
+
|
80
|
+
def file_basename
|
81
|
+
config.active_enviro
|
82
|
+
end
|
83
|
+
|
84
|
+
def local_folder
|
85
|
+
options.dig(:url_pull, :local_folder) || '.'
|
86
|
+
end
|
87
|
+
|
88
|
+
def target_url(required: true)
|
89
|
+
fpc = target_url_const
|
90
|
+
return fpc if fpc
|
91
|
+
return unless required
|
92
|
+
|
93
|
+
msg = "(#{self.class}) You should redefine the target_url method "
|
94
|
+
raise WrongConst, msg
|
95
|
+
end
|
96
|
+
|
97
|
+
def target_url_const
|
98
|
+
if (fpc = options.dig(:url_pull, :target_url_const))
|
99
|
+
raise WrongConst, "(#{self.class}) Invalid file pattern const referral: #{fpc}" unless fpc.match(CONST_REFERRAL)
|
100
|
+
|
101
|
+
begin
|
102
|
+
self.eval(fpc)
|
103
|
+
rescue NameError
|
104
|
+
self.class.const_get(fpc)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
rescue NameError
|
108
|
+
raise WrongConst, "(#{self.class}) Unknown constant: #{fpc}"
|
109
|
+
end
|
110
|
+
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
|