eco-helpers 3.0.26 → 3.0.28

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 (146) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +76 -5
  3. data/eco-helpers.gemspec +2 -1
  4. data/lib/eco/api/common/class_helpers.rb +1 -136
  5. data/lib/eco/api/common/loaders/base.rb +1 -1
  6. data/lib/eco/api/common/loaders/case_base.rb +1 -1
  7. data/lib/eco/api/common/loaders/config/cli.rb +1 -1
  8. data/lib/eco/api/common/loaders/config/session.rb +1 -1
  9. data/lib/eco/api/common/loaders/config/workflow.rb +1 -1
  10. data/lib/eco/api/common/loaders/config.rb +2 -5
  11. data/lib/eco/api/common/loaders/error_handler.rb +1 -1
  12. data/lib/eco/api/common/loaders/parser.rb +2 -2
  13. data/lib/eco/api/common/loaders/policy.rb +1 -1
  14. data/lib/eco/api/common/loaders/use_case/target_model.rb +1 -1
  15. data/lib/eco/api/common/loaders/use_case/type.rb +1 -1
  16. data/lib/eco/api/common/loaders/use_case.rb +1 -1
  17. data/lib/eco/api/common/people/default_parsers/archived_parser.rb +19 -0
  18. data/lib/eco/api/common/people/default_parsers/boolean_parser.rb +4 -4
  19. data/lib/eco/api/common/people/default_parsers/date_parser.rb +3 -3
  20. data/lib/eco/api/common/people/default_parsers/freemium_parser.rb +6 -6
  21. data/lib/eco/api/common/people/default_parsers/login_providers_parser.rb +3 -3
  22. data/lib/eco/api/common/people/default_parsers/multi_parser.rb +4 -4
  23. data/lib/eco/api/common/people/default_parsers/policy_groups_parser.rb +9 -6
  24. data/lib/eco/api/common/people/default_parsers/send_invites_parser.rb +6 -5
  25. data/lib/eco/api/common/people/default_parsers/xls_parser.rb +2 -2
  26. data/lib/eco/api/common/people/default_parsers.rb +1 -0
  27. data/lib/eco/api/common/people/entries.rb +16 -15
  28. data/lib/eco/api/common/people/person_entry.rb +53 -37
  29. data/lib/eco/api/common/people/person_parser.rb +8 -6
  30. data/lib/eco/api/common/people/supervisor_helpers.rb +3 -1
  31. data/lib/eco/api/common/session/logger/channels.rb +2 -1
  32. data/lib/eco/api/common/session/logger.rb +2 -2
  33. data/lib/eco/api/common/session/mailer/aws_provider.rb +3 -2
  34. data/lib/eco/api/common/session/mailer/provider_base.rb +2 -1
  35. data/lib/eco/api/common/session/mailer/sendgrid_provider.rb +9 -9
  36. data/lib/eco/api/common/session/mailer.rb +5 -3
  37. data/lib/eco/api/common/session/sftp.rb +11 -4
  38. data/lib/eco/api/common/version_patches/object.rb +2 -1
  39. data/lib/eco/api/custom/mailer.rb +1 -1
  40. data/lib/eco/api/error/handlers.rb +3 -3
  41. data/lib/eco/api/error.rb +17 -17
  42. data/lib/eco/api/microcases/people/apply_changes/set_account/account_excluded.rb +3 -11
  43. data/lib/eco/api/microcases/people/apply_changes/set_core/core_excluded.rb +4 -1
  44. data/lib/eco/api/microcases/people/manage/search.rb +3 -1
  45. data/lib/eco/api/organization/people.rb +1 -0
  46. data/lib/eco/api/policies.rb +2 -2
  47. data/lib/eco/api/session/batch/job/sets.rb +1 -0
  48. data/lib/eco/api/session/batch/job/type.rb +1 -0
  49. data/lib/eco/api/session/batch/job.rb +2 -2
  50. data/lib/eco/api/session/batch/launcher/valid_methods.rb +3 -2
  51. data/lib/eco/api/session/batch/launcher.rb +4 -5
  52. data/lib/eco/api/session/batch/searcher.rb +4 -4
  53. data/lib/eco/api/session/config/api.rb +2 -2
  54. data/lib/eco/api/session/config/apis/enviro_spaces.rb +2 -2
  55. data/lib/eco/api/session/config/post_launch.rb +7 -4
  56. data/lib/eco/api/session/config/sftp.rb +1 -1
  57. data/lib/eco/api/session/config/tagtree.rb +1 -1
  58. data/lib/eco/api/session/config/workflow.rb +4 -4
  59. data/lib/eco/api/session/config.rb +25 -24
  60. data/lib/eco/api/session.rb +4 -4
  61. data/lib/eco/api/usecases/base_case/model.rb +2 -1
  62. data/lib/eco/api/usecases/base_case/type.rb +2 -1
  63. data/lib/eco/api/usecases/base_io/validations.rb +6 -4
  64. data/lib/eco/api/usecases/cli/option.rb +5 -2
  65. data/lib/eco/api/usecases/default/people/amend/clear_abilities_case.rb +2 -2
  66. data/lib/eco/api/usecases/default/people/amend/restore_db_case.rb +16 -9
  67. data/lib/eco/api/usecases/default/people/treat/analyse_people_case.rb +20 -20
  68. data/lib/eco/api/usecases/default.rb +5 -5
  69. data/lib/eco/api/usecases/default_cases/to_csv_case.rb +8 -8
  70. data/lib/eco/api/usecases/default_cases/upsert_case.rb +4 -4
  71. data/lib/eco/api/usecases/graphql/helpers/base.rb +1 -1
  72. data/lib/eco/api/usecases/graphql/helpers/location/base/tree_tracking.rb +5 -1
  73. data/lib/eco/api/usecases/graphql/helpers/location/command/diffs/stages/commandable.rb +5 -3
  74. data/lib/eco/api/usecases/graphql/helpers/location/command/result.rb +3 -3
  75. data/lib/eco/api/usecases/graphql/helpers/location/command.rb +3 -0
  76. data/lib/eco/api/usecases/graphql/samples/location/command/dsl.rb +2 -2
  77. data/lib/eco/api/usecases/graphql/samples/location/command/service/tree_update.rb +9 -3
  78. data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff/convertible/inputable.rb +5 -4
  79. data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff/convertible/parsing.rb +5 -2
  80. data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff.rb +3 -3
  81. data/lib/eco/api/usecases/graphql/utils/sftp.rb +1 -1
  82. data/lib/eco/api/usecases/lib/{file_pattern.rb → files/file_pattern.rb} +1 -1
  83. data/lib/eco/api/usecases/lib/{sftp.rb → files/sftp.rb} +19 -7
  84. data/lib/eco/api/usecases/lib/files.rb +7 -0
  85. data/lib/eco/api/usecases/lib.rb +1 -2
  86. data/lib/eco/api/usecases/ooze_cases/export_register_case.rb +5 -5
  87. data/lib/eco/api/usecases/ooze_samples/helpers/exportable_ooze.rb +14 -11
  88. data/lib/eco/api/usecases/ooze_samples/helpers_migration/copying.rb +14 -23
  89. data/lib/eco/api/usecases/ooze_samples/helpers_migration/typed_fields_pairing.rb +49 -27
  90. data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +9 -9
  91. data/lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb +1 -1
  92. data/lib/eco/api/usecases/ooze_samples/register_export_case.rb +25 -17
  93. data/lib/eco/api/usecases/ooze_samples/register_migration_case.rb +41 -24
  94. data/lib/eco/api/usecases/ooze_samples/register_update_case.rb +16 -15
  95. data/lib/eco/api/usecases/samples/drivers/cli/sftp_cli.rb +15 -15
  96. data/lib/eco/api/usecases/samples/drivers/cli/url_pull_cli.rb +5 -5
  97. data/lib/eco/api/usecases/samples/drivers/sftp_sample.rb +5 -3
  98. data/lib/eco/api/usecases/use_case.rb +6 -6
  99. data/lib/eco/api/usecases/use_case_chain/chaining.rb +6 -6
  100. data/lib/eco/api/usecases/use_case_chain.rb +4 -4
  101. data/lib/eco/api/usecases/use_case_io.rb +2 -1
  102. data/lib/eco/api/usecases.rb +9 -9
  103. data/lib/eco/cli/config/options_set.rb +4 -4
  104. data/lib/eco/cli/config/use_cases.rb +3 -3
  105. data/lib/eco/cli/scripting/argument.rb +1 -1
  106. data/lib/eco/cli_default/input.rb +9 -9
  107. data/lib/eco/cli_default/options.rb +125 -100
  108. data/lib/eco/cli_default/people.rb +3 -3
  109. data/lib/eco/cli_default/usecases.rb +83 -83
  110. data/lib/eco/cli_default/workflow.rb +7 -7
  111. data/lib/eco/data/files/helpers.rb +7 -5
  112. data/lib/eco/data/fuzzy_match/result.rb +69 -26
  113. data/lib/eco/data/fuzzy_match/results.rb +10 -10
  114. data/lib/eco/data/fuzzy_match/score.rb +13 -8
  115. data/lib/eco/data/fuzzy_match.rb +69 -50
  116. data/lib/eco/data/hashes/diff_result/meta.rb +2 -1
  117. data/lib/eco/data/locations/node_base/treeify.rb +13 -11
  118. data/lib/eco/data/locations/node_diff/accessors.rb +2 -1
  119. data/lib/eco/data/mapper.rb +4 -4
  120. data/lib/eco/language/auxiliar_logger.rb +4 -4
  121. data/lib/eco/language/delegation/chainable_delegator.rb +18 -0
  122. data/lib/eco/language/delegation/delegating_missing.rb +104 -0
  123. data/lib/eco/language/delegation/delegating_missing_const.rb +53 -0
  124. data/lib/eco/language/delegation/delegating_missing_on_class.rb +53 -0
  125. data/lib/eco/language/delegation/for_delegator/const_delegator.rb +66 -0
  126. data/lib/eco/language/delegation/for_delegator/const_lookup_hooks.rb +99 -0
  127. data/lib/eco/language/delegation/for_delegator/delegated_class.rb +71 -0
  128. data/lib/eco/language/delegation/for_delegator.rb +11 -0
  129. data/lib/eco/language/delegation.rb +10 -0
  130. data/lib/eco/language/klass/builder.rb +29 -0
  131. data/lib/eco/language/klass/helpers_built.rb +9 -0
  132. data/lib/eco/language/klass/hierarchy.rb +34 -0
  133. data/lib/eco/language/klass/inheritable_class_vars.rb +45 -0
  134. data/lib/eco/language/klass/naming.rb +21 -0
  135. data/lib/eco/language/klass/resolver.rb +30 -0
  136. data/lib/eco/language/klass/when_inherited.rb +11 -13
  137. data/lib/eco/language/klass.rb +6 -0
  138. data/lib/eco/language/methods.rb +0 -1
  139. data/lib/eco/language/models/class_helpers.rb +25 -23
  140. data/lib/eco/language/models/collection.rb +12 -2
  141. data/lib/eco/language/strings/underscore.rb +17 -0
  142. data/lib/eco/language/strings.rb +8 -0
  143. data/lib/eco/language.rb +2 -0
  144. data/lib/eco/version.rb +1 -1
  145. metadata +39 -7
  146. data/lib/eco/language/methods/delegate_missing.rb +0 -29
@@ -1,4 +1,4 @@
1
- module Eco::API::UseCases::Lib
1
+ module Eco::API::UseCases::Lib::Files
2
2
  module Sftp
3
3
  class UnspecifiedRemoteFolder < ArgumentError; end
4
4
 
@@ -8,6 +8,7 @@ module Eco::API::UseCases::Lib
8
8
 
9
9
  private
10
10
 
11
+ # @return [String, FalseClass] the path of the remote file or `false` if failed.
11
12
  def upload(local_file, subfolder: remote_subfolder, gid: sftp_group_id)
12
13
  sftp_session.upload(
13
14
  local_file,
@@ -18,6 +19,9 @@ module Eco::API::UseCases::Lib
18
19
  alias_method :sftp_upload, :upload
19
20
 
20
21
  def sftp_group_id
22
+ return super if defined?(super) && !super.nil?
23
+ return group_id if respond_to?(:group_id, true)
24
+
21
25
  if (group_id = options.dig(:sftp, :group))
22
26
  group_id
23
27
  elsif self.class.const_defined?(:SFTP_GROUP)
@@ -31,15 +35,19 @@ module Eco::API::UseCases::Lib
31
35
  subfolder: remote_subfolder,
32
36
  pattern: nil,
33
37
  local_folder: self.local_folder,
38
+ only_latest: false,
34
39
  &block
35
40
  )
36
41
  remote_files = with_remote_files(subfolder: subfolder, pattern: pattern)
37
- return [] if remote_files.empty?
42
+
43
+ return [] if remote_files.empty?
44
+ remote_files = [remote_files.first] if only_latest
38
45
 
39
46
  file_names = remote_files.map {|file| to_remote_path(file.name, subfolder: subfolder)}
40
47
 
41
48
  log(:info) {
42
- msg = "Getting the following files into the local folder '#{local_folder}':\n"
49
+ msg = "Getting the following files into the local folder "
50
+ msg << "'#{local_folder || '.'}':\n"
43
51
  msg << ' * '
44
52
  msg << file_names.join("\n * ")
45
53
  msg
@@ -80,7 +88,7 @@ module Eco::API::UseCases::Lib
80
88
  sftp_archive_file!(filename)
81
89
  end
82
90
 
83
- def ensure_remote_empty(subfolder: remote_subfolder, pattern: nil)
91
+ def ensure_remote_empty(subfolder: remote_subfolder, pattern: nil, timeout: 3)
84
92
  files = with_remote_files(subfolder: subfolder, pattern: pattern)
85
93
  return if files.empty?
86
94
 
@@ -94,7 +102,7 @@ module Eco::API::UseCases::Lib
94
102
  'Do you want to proceed to delete? (Y/n):',
95
103
  explanation: msg,
96
104
  default: 'Y',
97
- timeout: 3
105
+ timeout: timeout
98
106
  ) do |response|
99
107
  next unless response.upcase.start_with?('Y')
100
108
 
@@ -109,12 +117,12 @@ module Eco::API::UseCases::Lib
109
117
  end
110
118
 
111
119
  def local_folder
120
+ return super if defined?(super) && !super.nil?
121
+
112
122
  if (local_dir = options.dig(:sftp, :local_folder))
113
123
  local_dir
114
124
  elsif self.class.const_defined?(:LOCAL_FOLDER)
115
125
  self.class::LOCAL_FOLDER
116
- else
117
- '.'
118
126
  end
119
127
  end
120
128
 
@@ -125,6 +133,8 @@ module Eco::API::UseCases::Lib
125
133
  # `remote_target_folder` overrides `sftp_config.remote_folder` as well as `remote_subfolder`
126
134
  # `remote_folder` overrides `sftp_config.remote_folder` but NOT `remote_subfolder`
127
135
  def remote_folder(subfolder = remote_subfolder)
136
+ return super if defined?(super) && !super.nil?
137
+
128
138
  rm_tf = options.dig(:sftp, :remote_target_folder)
129
139
  return rm_tf if rm_tf
130
140
 
@@ -133,6 +143,8 @@ module Eco::API::UseCases::Lib
133
143
  end
134
144
 
135
145
  def remote_subfolder(required: true)
146
+ return super if defined?(super) && !super.nil?
147
+
136
148
  remote_subdir = options.dig(:sftp, :remote_subfolder)
137
149
  remote_subdir ||= self.class::REMOTE_FOLDER if self.class.const_defined?(:REMOTE_FOLDER)
138
150
  remote_subdir ||= self.class::REMOTE_SUBFOLDER if self.class.const_defined?(:REMOTE_SUBFOLDER)
@@ -0,0 +1,7 @@
1
+ module Eco::API::UseCases::Lib
2
+ module Files
3
+ end
4
+ end
5
+
6
+ require_relative 'files/sftp'
7
+ require_relative 'files/file_pattern'
@@ -8,5 +8,4 @@ module Eco
8
8
  end
9
9
 
10
10
  require_relative 'lib/error_handling'
11
- require_relative 'lib/sftp'
12
- require_relative 'lib/file_pattern'
11
+ require_relative 'lib/files'
@@ -1,13 +1,13 @@
1
1
  # Use case to export a register into a CSV
2
2
  class Eco::API::UseCases::OozeCases::ExportRegisterCase < Eco::API::UseCases::OozeSamples::RegisterExportCase
3
- name "export-register"
3
+ name 'export-register'
4
4
  type :other
5
5
  batch_size 5
6
6
 
7
7
  def main(session, options, usecase)
8
- super(session, options, usecase) do
8
+ super do
9
9
  # Save the File
10
- CSV.open(filename, "w") do |csv|
10
+ CSV.open(filename, 'w') do |csv|
11
11
  csv << exportable_register.header(refresh: true)
12
12
  exportable_register.each(as_values: true) do |values|
13
13
  csv << values
@@ -79,7 +79,7 @@ class Eco::API::UseCases::OozeCases::ExportRegisterCase < Eco::API::UseCases::Oo
79
79
  end
80
80
 
81
81
  def options_delimiter
82
- options.dig(:export, :options, :delimiter) || "|"
82
+ options.dig(:export, :options, :delimiter) || '|'
83
83
  end
84
84
 
85
85
  def include_deindexed?
@@ -94,7 +94,7 @@ class Eco::API::UseCases::OozeCases::ExportRegisterCase < Eco::API::UseCases::Oo
94
94
  @filename ||= (options[:file] || options.dig(:export, :file, :name)).tap do |filename|
95
95
  next if filename
96
96
 
97
- log(:error) { "Destination file not specified" }
97
+ log(:error) { 'Destination file not specified' }
98
98
  return false
99
99
  end
100
100
  end
@@ -5,16 +5,16 @@ module Eco
5
5
  module Helpers
6
6
  # Class to ease the export process
7
7
  class ExportableOoze
8
- MERGE_DELIMITER = "#:#".freeze
8
+ MERGE_DELIMITER = '#:#'.freeze
9
9
  META_FIELDS = {
10
- "id" => "Internal ID",
11
- "uid" => "Unique ID",
12
- "name" => "Name of Page",
13
- "state" => "State of Page",
14
- "time_zone" => "Time Zone",
15
- "created_at" => "Page Created",
16
- "updated_at" => "Last updated",
17
- "tags" => "Location Tags"
10
+ 'id' => 'Internal ID',
11
+ 'uid' => 'Unique ID',
12
+ 'name' => 'Name of Page',
13
+ 'state' => 'State of Page',
14
+ 'time_zone' => 'Time Zone',
15
+ 'created_at' => 'Page Created',
16
+ 'updated_at' => 'Last updated',
17
+ 'tags' => 'Location Tags'
18
18
  }.freeze
19
19
  DEFAULT_OPTIONS = {
20
20
  delimiter: "\n",
@@ -31,9 +31,10 @@ module Eco
31
31
  def label(field, default: nil)
32
32
  value = nil
33
33
  value ||= field.label.to_s.strip if field.respond_to?(:label)
34
- value = nil unless value && !value.empty?
34
+ value = nil unless value && !value.empty?
35
35
  return value if value || !default
36
- default || "Unnamed field:"
36
+
37
+ default || 'Unnamed field:'
37
38
  end
38
39
 
39
40
  def key_ref_label(field, default: nil)
@@ -157,6 +158,7 @@ module Eco
157
158
  return false if opts[:only_indexed] && !self.class.indexed?(field)
158
159
  return false if opts[:only_labeled] && !self.class.label?(field)
159
160
  return false if opts[:only_with_ref] && !self.class.with_ref?(field)
161
+
160
162
  true
161
163
  end
162
164
 
@@ -167,6 +169,7 @@ module Eco
167
169
  def to_value(field, delimiter: self.delimiter)
168
170
  return nil unless field.respond_to?(:to_s)
169
171
  return field.to_s unless offers_delimiter?(field.method(:to_s))
172
+
170
173
  field.to_s(delimiter: delimiter)
171
174
  end
172
175
 
@@ -69,7 +69,8 @@ class Eco::API::UseCases::OozeSamples
69
69
  # @note
70
70
  # - When used with `type: nil` it may pair fields of different type. There isn't refinement for this yet.
71
71
  def with_src_dst_field_pair(src, dst, label: nil, label_dst: label, type: nil, src_excluded: [], dst_excluded: []) # rubocop:disable Metrics/AbcSize
72
- msg = "These helpers are to be included in class cases inheriting from Eco::API::UseCases::OozeSamples::RegisterUpdateCase"
72
+ msg = "These helpers are to be included in class cases "
73
+ msg << "inheriting from Eco::API::UseCases::OozeSamples::RegisterUpdateCase"
73
74
  raise msg unless respond_to?(:with_fields, true)
74
75
 
75
76
  src_flds = with_fields(src, label: label, type: type)
@@ -82,7 +83,7 @@ class Eco::API::UseCases::OozeSamples
82
83
  msg = "There isn't a '#{type}'"
83
84
  dst_msg = dst_flds.empty?? "destination field named '#{label_dst}'" : nil
84
85
  src_msg = src_flds.empty?? "source field named '#{label}'" : nil
85
- msg << " #{[dst_msg, src_msg].join(" or ")} (source: '#{src.id}')"
86
+ msg << " #{[dst_msg, src_msg].join(' or ')} (source: '#{src.id}')"
86
87
 
87
88
  log(:warn) { msg }
88
89
  return nil, nil
@@ -132,52 +133,42 @@ class Eco::API::UseCases::OozeSamples
132
133
  def copy_field_content(src, dst) # rubocop:disable Metrics/AbcSize
133
134
  type = src.type
134
135
  case type
135
- when "select"
136
+ when 'select'
136
137
  src.values.each {|val| dst.select(val)} # rubocop:disable Style/HashEachMethods
137
138
  dst.other_desc = src.other_desc if src.other && src.other_desc && dst.other
138
- when "plain_text", "date", "number", "gauge"
139
+ when 'plain_text', 'date', 'number', 'gauge'
139
140
  dst.value = src.value
140
- when "rich_text"
141
+ when 'rich_text'
141
142
  dst.content = src.content
142
- when "cross_reference"
143
+ when 'cross_reference'
143
144
  src.reference_ids.each {|id| dst.add(id)}
144
- when "people"
145
+ when 'people'
145
146
  dst.people_ids << src.people_ids.to_a
146
- when "geo"
147
+ when 'geo'
147
148
  src_coo = src.coordinates
148
149
  dst_coo = dst.coordinates
149
150
  dst_coo.lat, dst_coo.lon = src_coo.lat, src_coo.lon # rubocop:disable Style/ParallelAssignment
150
- when "file"
151
+ when 'file'
151
152
  src.items.each do |src_item|
152
153
  dst.add_file(src_item.file_container_id) do |dst_item|
153
154
  dst_item.label = src_item.label
154
155
  end
155
156
  end
156
- when "image_gallery"
157
+ when 'image_gallery'
157
158
  src.images.each do |src_image|
158
159
  dst.add_image(src_image.upload_id) do |dst_image|
159
160
  dst_image.caption = src_image.caption
160
161
  end
161
162
  end
162
- when "checklist"
163
+ when 'checklist'
163
164
  src.items.each do |src_item|
164
165
  dst.add_item(label: src_item.label) do |dst_item|
165
166
  dst_item.checked = src_item.checked
166
167
  end
167
168
  end
168
- when "law"
169
+ when 'law', 'page_action', 'actions_list', 'signature'
169
170
  "won't copy"
170
- when "page_action"
171
- "won't copy"
172
- when "actions_list"
173
- "won't copy"
174
- when "signature"
175
- "can't copy"
176
- when "tag_field"
177
- "can't copy"
178
- when "chart"
179
- "won't copy"
180
- when "frequency_rate_chart"
171
+ when 'tag_field', 'chart', 'frequency_rate_chart'
181
172
  "won't copy"
182
173
  end
183
174
  end
@@ -12,7 +12,7 @@ class Eco::API::UseCases::OozeSamples
12
12
  class TypedFieldsPairing
13
13
  include Eco::API::UseCases::OozeSamples::Helpers::Shortcuts
14
14
 
15
- EXCLUDED_TYPES = ["tag_field", "chart", "frequency_rate_chart"]
15
+ EXCLUDED_TYPES = %w[tag_field chart frequency_rate_chart].freeze
16
16
 
17
17
  attr_reader :src, :dst
18
18
  attr_reader :src_unpaired, :dst_unpaired
@@ -20,11 +20,12 @@ class Eco::API::UseCases::OozeSamples
20
20
 
21
21
  def initialize(source, destination, src_excluded: nil, dst_excluded: nil,
22
22
  exclude_ximport: false)
23
- @src = source
24
- @dst = destination
25
- @src_excluded = src_excluded || []
26
- @dst_excluded = dst_excluded || []
27
- @exclude_ximport = !!exclude_ximport
23
+ @src = source
24
+ @dst = destination
25
+ @src_excluded = src_excluded || []
26
+ @dst_excluded = dst_excluded || []
27
+ @exclude_ximport = exclude_ximport
28
+
28
29
  reset!
29
30
  process(exact: true)
30
31
  process
@@ -37,28 +38,36 @@ class Eco::API::UseCases::OozeSamples
37
38
  end
38
39
 
39
40
  def report_src_unpaired(only_present: true, only_indexed: false)
40
- return nil if src_unpaired.empty?
41
- msg = "Source entry with unpaired fields (#{object_reference(src)}):\n"
41
+ return if src_unpaired.empty?
42
+
43
+ msg = "Source entry with unpaired fields (#{object_reference(src)}):\n"
44
+
42
45
  src_filtered = src_unpaired.values.flatten.reject do |src_fld|
43
46
  only_present && src_fld.empty?
44
47
  end.reject do |src_fld|
45
48
  only_indexed && src_fld.deindex
46
49
  end
47
- return nil if src_filtered.empty?
50
+
51
+ return if src_filtered.empty?
52
+
48
53
  msg << src_filtered.map do |src_fld|
49
54
  " * #{object_reference(src_fld)}"
50
55
  end.join("\n")
51
56
  end
52
57
 
53
58
  def report_dst_unpaired(only_required: false, exclude_ximport: true)
54
- return nil if dst_unpaired.empty?
55
- msg = "Destination entry with unpaired fields (#{object_reference(src)}):\n"
59
+ return if dst_unpaired.empty?
60
+
61
+ msg = "Destination entry with unpaired fields (#{object_reference(src)}):\n"
62
+
56
63
  dst_filtered = dst_unpaired.values.flatten.reject do |dst_fld|
57
64
  only_required && !dst_fld.required
58
65
  end.reject do |dst_fld|
59
66
  exclude_ximport && ximport?(dst_fld)
60
67
  end
61
- return nil if dst_filtered.empty?
68
+
69
+ return if dst_filtered.empty?
70
+
62
71
  msg << dst_filtered.map do |dst_fld|
63
72
  " * #{object_reference(dst_fld)}"
64
73
  end.join("\n")
@@ -66,23 +75,27 @@ class Eco::API::UseCases::OozeSamples
66
75
 
67
76
  def report_multi_pairs(only_present: true, only_indexed: false, dst_exclude_ximport: true)
68
77
  return nil if src_dst_multi.empty?
69
- "".tap do |msg|
70
- msg << "Source fields in (#{object_reference(src)}) paired with multiple destination fields:\n"
71
- msg_flds = ""
78
+ ''.tap do |msg|
79
+ msg << "Source fields in (#{object_reference(src)}) paired with multiple destination fields:\n"
80
+ msg_flds = ''
72
81
  src_dst_multi.each do |type, pairs|
73
82
  pairs.each do |(src_fld, dst_flds)|
74
83
  next if (only_present && src_fld.empty?) || (only_indexed && src_fld.deindex)
84
+
75
85
  dst_filtered = dst_flds.reject do |dst_fld|
76
86
  dst_exclude_ximport && ximport?(dst_fld)
77
87
  end
78
88
  next if dst_filtered.empty?
89
+
79
90
  msg_flds << " * #{object_reference(src_fld)}\n"
80
91
  msg_flds << dst_filtered.map do |dst_fld|
81
92
  " * #{object_reference(dst_fld)}"
82
93
  end.compact.join("\n")
83
94
  end
84
95
  end
96
+
85
97
  return nil if msg_flds.empty?
98
+
86
99
  msg << msg_flds
87
100
  end
88
101
  end
@@ -91,8 +104,10 @@ class Eco::API::UseCases::OozeSamples
91
104
  def resolve(*flds)
92
105
  flds.each do |fld|
93
106
  next if unpaired_delete(fld, src_unpaired)
107
+
94
108
  unpaired_delete(fld, dst_unpaired)
95
109
  end
110
+
96
111
  multi_delete(*flds)
97
112
  end
98
113
 
@@ -120,11 +135,13 @@ class Eco::API::UseCases::OozeSamples
120
135
  def process(exact: false)
121
136
  src_unpaired.each do |type, src_pend|
122
137
  next unless (dst_pend = dst_unpaired[type]) && !dst_pend.empty?
138
+
123
139
  src_pend.dup.each do |src_fld|
124
140
  dst_candidates = dst_pend.select do |dst_fld|
125
141
  str_eq?(src_fld.label, dst_fld.label, exact: exact)
126
142
  end
127
143
  next if dst_candidates.empty?
144
+
128
145
  if dst_candidates.count == 1
129
146
  pair_add(src_fld, dst_candidates.first)
130
147
  else
@@ -134,14 +151,14 @@ class Eco::API::UseCases::OozeSamples
134
151
  end
135
152
  end
136
153
 
137
- def str_eq?(str1, str2, exact: false)
138
- same_string?(str1, str2, **str_eq_params.merge(exact: exact))
154
+ def str_eq?(str_1, str_2, exact: false)
155
+ same_string?(str_1, str_2, **str_eq_params, exact: exact)
139
156
  end
140
157
 
141
158
  def str_eq_params
142
159
  {
143
- exact: exact?,
144
- mild: only_letters?,
160
+ exact: exact?,
161
+ mild: only_letters?,
145
162
  ignore: false
146
163
  }.tap do |params|
147
164
  params.merge!(ignore: bracked_regex) if non_bracked?
@@ -158,13 +175,15 @@ class Eco::API::UseCases::OozeSamples
158
175
  type = fld.type
159
176
  return false unless unpaired.key?(type)
160
177
  return false unless (flds = unpaired[type]).delete(fld)
178
+
161
179
  unpaired.delete(type) if flds.empty?
162
180
  true
163
181
  end
164
182
 
165
183
  def multi_add(type, src_fld, *dst_flds)
166
184
  (src_dst_multi[type] ||= []) << (pair = [src_fld, dst_flds])
167
- @src_multi[src_fld] = pair
185
+ @src_multi[src_fld] = pair
186
+
168
187
  dst_flds.each do |dst_fld|
169
188
  (@dst_multi[dst_fld] ||= []) << pair
170
189
  end
@@ -172,8 +191,9 @@ class Eco::API::UseCases::OozeSamples
172
191
 
173
192
  def multi_delete(*flds)
174
193
  flds.each do |fld|
175
- next unless type_pairs = src_dst_multi[fld.type]
176
- if pairs = @dst_multi.delete(fld)
194
+ next unless (type_pairs = src_dst_multi[fld.type])
195
+
196
+ if (pairs = @dst_multi.delete(fld))
177
197
  pairs.each do |pair|
178
198
  src_fld = pair.first
179
199
  dst_flds = pair.last
@@ -186,12 +206,14 @@ class Eco::API::UseCases::OozeSamples
186
206
  elsif @src_multi.key?(fld)
187
207
  pair = @src_multi.delete(fld)
188
208
  type_pairs.delete(pair)
209
+
189
210
  pair.last.each do |dst_fld|
190
211
  pairs = @dst_multi[dst_fld]
191
212
  pairs.delete(pair)
192
213
  @dst_multi.delete(dst_fld) if pairs.empty?
193
214
  end
194
215
  end
216
+
195
217
  src_dst_multi.delete(fld.type) if type_pairs.empty?
196
218
  end
197
219
  end
@@ -215,20 +237,20 @@ class Eco::API::UseCases::OozeSamples
215
237
  end
216
238
 
217
239
  def ximport?(fld)
218
- fld && fld.tooltip.to_s.include?("ximport")
240
+ fld && fld.tooltip.to_s.include?('ximport')
219
241
  end
220
242
 
221
243
  def reset!
222
- @src_unpaired = by_type(src_components)
223
- @dst_unpaired = by_type(dst_components)
244
+ @src_unpaired = by_type(src_components)
245
+ @dst_unpaired = by_type(dst_components)
224
246
  @src_dst_pairs = []
225
247
  reset_multi!
226
248
  end
227
249
 
228
250
  def reset_multi!
229
251
  @src_dst_multi = {}
230
- @src_multi = {}
231
- @dst_multi = {}
252
+ @src_multi = {}
253
+ @dst_multi = {}
232
254
  end
233
255
  end
234
256
  end
@@ -1,6 +1,6 @@
1
1
  # @attr_reader target [Ecoportal::API::V2::Page] current target ooze.
2
2
  class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders::UseCase
3
- name "ooze-base"
3
+ name 'ooze-base'
4
4
  type :other
5
5
 
6
6
  include Eco::API::UseCases::OozeSamples::Helpers
@@ -8,7 +8,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
8
8
 
9
9
  attr_reader :target
10
10
 
11
- SAVE_PATCH = "ooze_patch_update.json".freeze
11
+ SAVE_PATCH = 'ooze_patch_update.json'.freeze
12
12
  DRY_COUNT = 5
13
13
 
14
14
  def main(_session, options, _usecase)
@@ -37,7 +37,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
37
37
  def create_page(page = nil, template_id: nil, retrieve: false)
38
38
  template_id = template_id.id if template_id.is_a?(Ecoportal::API::V2::Page)
39
39
  template_id ||= page.template_id if page.respond_to?(:template_id)
40
- template_id ||= page["template_id"] if page.is_a?(Hash)
40
+ template_id ||= page['template_id'] if page.is_a?(Hash)
41
41
  page = new_page(template_id) unless page || !template_id
42
42
 
43
43
  yield(page) if block_given?
@@ -190,8 +190,8 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
190
190
  def new_target(object, warn_pending_changes: true)
191
191
  if dirty?(target)
192
192
  if warn_pending_changes
193
- msg = "You you are switching to a new target #{object_reference(object)}"
194
- msg += " after doing unsaved changes to #{object_reference(target)}"
193
+ msg = "You you are switching to a new target #{object_reference(object)}"
194
+ msg << " after doing unsaved changes to #{object_reference(target)}"
195
195
  log(:warn) { msg }
196
196
  end
197
197
 
@@ -202,17 +202,17 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
202
202
  end
203
203
 
204
204
  def dirty?(object)
205
- object && patch_doc(object)["page"]
205
+ object && patch_doc(object)['page']
206
206
  end
207
207
 
208
208
  def backup_patch!(ooze = target)
209
- unless (patch = (patch_doc(ooze) || {})["page"])
209
+ unless (patch = (patch_doc(ooze) || {})['page'])
210
210
  log(:info) { "No changes to update for #{object_reference(ooze)}." }
211
211
  return
212
212
  end
213
213
 
214
214
  # store the request
215
- File.open(SAVE_PATCH, "w") do |file|
215
+ File.open(SAVE_PATCH, 'w') do |file|
216
216
  #file << (patch_doc || {}).to_json
217
217
  file << JSON.pretty_generate(patch || {})
218
218
  end
@@ -222,7 +222,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
222
222
 
223
223
  def display_patch(entry = target)
224
224
  return if options.dig(:feedback, :only_stats)
225
- return unless (patch = (patch_doc(entry) || {})["page"])
225
+ return unless (patch = (patch_doc(entry) || {})['page'])
226
226
 
227
227
  pp patch
228
228
  end
@@ -6,7 +6,7 @@ class Eco::API::UseCases::OozeSamples::OozeRunBaseCase < Eco::API::UseCases::Ooz
6
6
  SAVE_PATCH = 'ooze_patch_update.json'.freeze
7
7
 
8
8
  def main(session, options, usecase)
9
- super(session, options, usecase) do
9
+ super do
10
10
  if method(:process_ooze).parameters.count.zero?
11
11
  ooze # retrieve ooze
12
12
  process_ooze