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
@@ -4,9 +4,7 @@ class Eco::API::UseCases::Default::People::Treat::Analyse < Eco::API::Common::Lo
4
4
 
5
5
  require_relative 'cli/analyse_people_cli'
6
6
 
7
- attr_reader :people
8
-
9
- def main(_people, _session, options, _usecase)
7
+ def main(*_args)
10
8
  options[:end_get] = false
11
9
 
12
10
  if case_options[:identify_duplicates]
@@ -97,7 +95,12 @@ class Eco::API::UseCases::Default::People::Treat::Analyse < Eco::API::Common::Lo
97
95
  opts.deep_merge!(export: {options: {internal_names: true}})
98
96
  # opts.deep_merge!(export: {options: {split_schemas: true}})
99
97
 
100
- session.process_case("to-csv", type: :export, people: data, options: opts.merge(options.slice(:export)))
98
+ session.process_case(
99
+ 'to-csv',
100
+ type: :export,
101
+ data: data,
102
+ options: opts.merge(options.slice(:export))
103
+ )
101
104
  end
102
105
 
103
106
  def unique_words?
@@ -8,9 +8,7 @@ class Eco::API::UseCases::Default::People::Treat::SupersCyclicIdentify < Eco::AP
8
8
  OUT_TIME_FORMAT = '%Y%m%dT%H%M%S'.freeze
9
9
  OUT_FILENAME = "cyclic_supers".freeze
10
10
 
11
- attr_reader :people
12
-
13
- def main(_people, _session, options, _usecase)
11
+ def main(*_args)
14
12
  options[:end_get] = false
15
13
  save!(cyclic_sets)
16
14
  end
@@ -8,12 +8,8 @@ class Eco::API::UseCases::Default::People::Treat::SupersHierarchy < Eco::API::Co
8
8
  OUT_TIME_FORMAT = '%Y%m%dT%H%M%S'.freeze
9
9
  OUT_FILENAME = "supers_hierarchy".freeze
10
10
 
11
- attr_reader :people
12
-
13
- def main(people, _session, options, _usecase)
11
+ def main(*_args)
14
12
  options[:end_get] = false
15
- @people = people
16
-
17
13
  save!(hierarchy, file: output_filename)
18
14
  end
19
15
 
@@ -2,8 +2,8 @@ class Eco::API::UseCases::DefaultCases::EntriesToCsv < Eco::API::Common::Loaders
2
2
  name "entries-to-csv"
3
3
  type :import
4
4
 
5
- def main(entries, session, options, usecase)
6
- entries.export(filename)
5
+ def main(*_args)
6
+ input.export(filename)
7
7
  end
8
8
 
9
9
  private
@@ -3,10 +3,8 @@ class Eco::API::UseCases::DefaultCases::HrisCase < Eco::API::Common::Loaders::Us
3
3
  type :sync
4
4
 
5
5
  attr_reader :creation, :update, :supers, :leavers
6
- attr_reader :people
7
6
 
8
7
  def main(entries, people, session, options, usecase)
9
- @people = people
10
8
  require_only_one_schema!
11
9
  micro = session.micro
12
10
  @leavers = session.new_job("pre", "leavers", :update, usecase, :account)
@@ -0,0 +1,3 @@
1
+ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::UseCases::Samples::Drivers::Sftp
2
+ end
3
+
@@ -9,4 +9,4 @@ module Eco
9
9
  end
10
10
  end
11
11
 
12
- require_relative 'samples/sftp_case'
12
+ require_relative 'samples/sftp'
@@ -4,11 +4,8 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
4
4
 
5
5
  OUT_FILENAME = 'pm'.freeze
6
6
 
7
- attr_reader :people
8
-
9
7
  def main(people, _session, options, _usecase)
10
8
  options[:end_get] = false
11
- @people = people
12
9
 
13
10
  unless people && !people.empty?
14
11
  log(:warn) { "No source people to create the file... aborting!" }
@@ -113,9 +110,9 @@ class Eco::API::UseCases::DefaultCases::ToCsvCase < Eco::API::Common::Loaders::U
113
110
 
114
111
  def by_schema
115
112
  people.group_by do |person|
116
- if (details = person.details)
117
- details.schema_id
118
- end
113
+ next unless (details = person.details)
114
+
115
+ details.schema_id
119
116
  end.transform_values do |persons|
120
117
  people.newFrom persons
121
118
  end
@@ -2,13 +2,13 @@ class Eco::API::UseCases::GraphQL::Base < Eco::API::Common::Loaders::UseCase
2
2
  class NotImplementedMethod < StandardError
3
3
  end
4
4
 
5
- name "graphql-base"
5
+ name 'graphql-base'
6
6
  type :other
7
7
 
8
8
  include Eco::API::UseCases::GraphQL::Helpers::Base
9
9
  include Eco::Language::Methods::CallDetector
10
10
 
11
- def main(_sess, options, _case)
11
+ def main(*_args)
12
12
  options[:end_get] = false
13
13
  process
14
14
  end
@@ -16,6 +16,7 @@ class Eco::API::UseCases::GraphQL::Base < Eco::API::Common::Loaders::UseCase
16
16
  # Write here your script
17
17
  def process
18
18
  return unless called_via?(Eco::API::UseCases::GraphQL::Base, __method__)
19
+
19
20
  raise NotImplementedMethod, "You need to inherit from this class ('#{self.class}')"
20
21
  end
21
22
  end
@@ -13,7 +13,7 @@ module Eco::API::UseCases::GraphQL::Helpers::Base
13
13
  end
14
14
 
15
15
  def simulate?
16
- options[:simulate]
16
+ options[:simulate] || options[:dry_run]
17
17
  end
18
18
  end
19
19
  end
@@ -32,9 +32,9 @@ module Eco::API::UseCases::GraphQL::Helpers::Base
32
32
  rescue StandardError => err
33
33
  self.exception ||= err
34
34
 
35
- unless exception_already_captured?(err)
36
- log(:error) { err.patch_full_message }
37
- end
35
+ return unless exception_already_captured?(err)
36
+
37
+ log(:error) { err.patch_full_message }
38
38
  rescue SystemExit
39
39
  @exiting = true
40
40
  raise
@@ -0,0 +1,17 @@
1
+ module Eco::API::UseCases::GraphQL::Helpers::Contractors
2
+ module Base
3
+ module Load
4
+ include Eco::API::UseCases::GraphQL::Helpers::Base
5
+
6
+ def load_contractors
7
+ contractor_entities
8
+ end
9
+
10
+ private
11
+
12
+ def contractor_entities
13
+ graphql.currentOrganization.contractorEntities
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base/load'
2
+
3
+ module Eco::API::UseCases::GraphQL::Helpers::Contractors
4
+ module Base
5
+ include Eco::API::UseCases::GraphQL::Helpers::Base
6
+ include Load
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ module Eco::API::UseCases::GraphQL::Helpers
2
+ module Contractors
3
+ end
4
+ end
5
+
6
+ require_relative 'contractors/base'
@@ -14,9 +14,9 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
14
14
  @target_structure_id ||= current_tree.id if current_tree.respond_to?(:id)
15
15
  return @target_structure_id if @target_structure_id
16
16
 
17
- msg = "Const TARGET_STRUCTURE_ID has not been defined, "
18
- msg << "nor options(:source, :structure_id). "
19
- msg << "Infering active locations structure."
17
+ msg = 'Const TARGET_STRUCTURE_ID has not been defined, '
18
+ msg << 'nor options(:source, :structure_id). '
19
+ msg << 'Infering active locations structure.'
20
20
  log(:warn) { msg }
21
21
 
22
22
  # a backup happens:
@@ -51,7 +51,8 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
51
51
  end
52
52
 
53
53
  def target_structure_id_const
54
- return nil unless self.class.const_defined?(:TARGET_STRUCTURE_ID)
54
+ return unless self.class.const_defined?(:TARGET_STRUCTURE_ID)
55
+
55
56
  self.class.const_get(:TARGET_STRUCTURE_ID)
56
57
  end
57
58
  end
@@ -15,7 +15,7 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
15
15
  # @param commands [Array<Hash>]
16
16
  def input(commands, force_continue: force_continue?)
17
17
  {
18
- clientMutationId: "",
18
+ clientMutationId: '',
19
19
  id: target_structure_id,
20
20
  force: force_continue,
21
21
  commands: commands
@@ -34,7 +34,7 @@ module Eco::API::UseCases::GraphQL::Helpers::Location
34
34
 
35
35
  if batch_input[:commands].empty?
36
36
  msg = "#{dry_run_msg}No commands for '#{desc}'."
37
- msg << " Skipping batch..." unless simulate?
37
+ msg << ' Skipping batch...' unless simulate?
38
38
  log(:info) { msg }
39
39
 
40
40
  return
@@ -5,3 +5,4 @@ end
5
5
 
6
6
  require_relative 'helpers/base'
7
7
  require_relative 'helpers/location'
8
+ require_relative 'helpers/contractors'
@@ -0,0 +1,5 @@
1
+ module Eco::API::UseCases::GraphQL::Samples
2
+ module Contractors::DSL
3
+ include Eco::API::UseCases::GraphQL::Helpers::Contractors::Base
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ module Eco::API::UseCases::GraphQL
2
+ class Samples::Contractors < Eco::API::UseCases::GraphQL::Base
3
+ name 'contractors_base'
4
+ target_model :contractors
5
+
6
+ require_relative 'contractors/dsl'
7
+ include Eco::API::UseCases::GraphQL::Samples::Contractors::DSL
8
+
9
+ def main(*_args)
10
+ options[:end_get] = false
11
+ end
12
+
13
+ def process
14
+ raise 'Please do not use this method with contractor use cases. Use main'
15
+ end
16
+ end
17
+ end
@@ -1,9 +1,9 @@
1
+ # @todo maybe delete, it isn't being used anywhere
1
2
  module Eco::API::UseCases::GraphQL::Samples
2
3
  module Location::Service
3
4
  # Base class to create service classes that work like a use case
4
5
  class Base
5
6
  include Eco::API::UseCases::GraphQL::Samples::Location::DSL
6
-
7
7
  end
8
8
  end
9
9
  end
@@ -1,6 +1,6 @@
1
1
  module Eco::API::UseCases::GraphQL
2
2
  class Samples::Location < Eco::API::UseCases::GraphQL::Base
3
- name "location-base"
3
+ name 'location-base'
4
4
 
5
5
  require_relative 'location/dsl'
6
6
  include Eco::API::UseCases::GraphQL::Samples::Location::DSL
@@ -4,3 +4,4 @@ module Eco::API::UseCases::GraphQL
4
4
  end
5
5
 
6
6
  require_relative 'samples/location'
7
+ require_relative 'samples/contractors'
@@ -211,7 +211,6 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
211
211
  return
212
212
  end
213
213
 
214
- patch = patch_doc(ooze)
215
214
  # store the request
216
215
  File.open(SAVE_PATCH, "w") do |file|
217
216
  #file << (patch_doc || {}).to_json
@@ -1,9 +1,9 @@
1
1
  # Base class to run a script against a single ooze.
2
2
  class Eco::API::UseCases::OozeSamples::OozeRunBaseCase < Eco::API::UseCases::OozeSamples::OozeBaseCase
3
- name "ooze-run-base"
3
+ name 'ooze-run-base'
4
4
  type :other
5
5
 
6
- SAVE_PATCH = "ooze_patch_update.json".freeze
6
+ SAVE_PATCH = 'ooze_patch_update.json'.freeze
7
7
 
8
8
  def main(session, options, usecase)
9
9
  super(session, options, usecase) do
@@ -21,8 +21,8 @@ class Eco::API::UseCases::OozeSamples::OozeRunBaseCase < Eco::API::UseCases::Ooz
21
21
  end
22
22
  end
23
23
 
24
- def process_ooze(page = target)
25
- raise "You need to redefine this method"
24
+ def process_ooze(_page = target)
25
+ raise 'You need to redefine this method'
26
26
  end
27
27
 
28
28
  private
@@ -50,15 +50,15 @@ class Eco::API::UseCases::OozeSamples::OozeRunBaseCase < Eco::API::UseCases::Ooz
50
50
  end
51
51
 
52
52
  def exit_if_no_changes!
53
- return if !!patch_doc["page"]
53
+ return unless patch_doc['page'].nil?
54
54
 
55
- log(:info) { "No Changes!!" }
55
+ log(:info) { 'No Changes!!' }
56
56
  exit(0)
57
57
  end
58
58
 
59
59
  def prompt_to_confirm!
60
- micro.prompt_user("Do you want to proceed (y/N)?", default: "Y") do |response|
61
- exit(1) unless response.upcase.start_with?("Y")
60
+ micro.prompt_user('Do you want to proceed (y/N)?', default: 'Y') do |response|
61
+ exit(1) unless response.upcase.start_with?('Y')
62
62
  end
63
63
  end
64
64
  end
@@ -1,4 +1,4 @@
1
- class Eco::API::UseCases::DefaultCases::Samples::Sftp
1
+ class Eco::API::UseCases::Samples::Drivers::Sftp
2
2
  class Cli < Eco::API::UseCases::Cli
3
3
  desc "SFTP case: manages remote files that match a file pattern"
4
4
 
@@ -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
@@ -1,17 +1,17 @@
1
1
  # rubocop:disable Naming/AccessorMethodName
2
- class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loaders::UseCase
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 "sftp"
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 "The SFTP is not configured" unless session.sftp?
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 << "as a RegEx expression that matches the target remote file"
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: "/IN/Personnel"
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 << "as the folder where the target file sits. Ex: /IN/Personnel"
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
- "Archive"
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,13 @@
1
+ module Eco
2
+ module API
3
+ class UseCases
4
+ class Samples
5
+ module Drivers
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ require_relative 'drivers/sftp_sample'
13
+ require_relative 'drivers/url_pull_sample'
@@ -0,0 +1,11 @@
1
+ module Eco
2
+ module API
3
+ class UseCases
4
+ class Samples < Eco::API::UseCases
5
+ end
6
+ end
7
+ end
8
+ end
9
+
10
+ require_relative 'samples/drivers'
11
+
@@ -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