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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +76 -5
- data/eco-helpers.gemspec +2 -1
- data/lib/eco/api/common/class_helpers.rb +1 -136
- data/lib/eco/api/common/loaders/base.rb +1 -1
- data/lib/eco/api/common/loaders/case_base.rb +1 -1
- data/lib/eco/api/common/loaders/config/cli.rb +1 -1
- data/lib/eco/api/common/loaders/config/session.rb +1 -1
- data/lib/eco/api/common/loaders/config/workflow.rb +1 -1
- data/lib/eco/api/common/loaders/config.rb +2 -5
- data/lib/eco/api/common/loaders/error_handler.rb +1 -1
- data/lib/eco/api/common/loaders/parser.rb +2 -2
- data/lib/eco/api/common/loaders/policy.rb +1 -1
- data/lib/eco/api/common/loaders/use_case/target_model.rb +1 -1
- data/lib/eco/api/common/loaders/use_case/type.rb +1 -1
- data/lib/eco/api/common/loaders/use_case.rb +1 -1
- data/lib/eco/api/common/people/default_parsers/archived_parser.rb +19 -0
- data/lib/eco/api/common/people/default_parsers/boolean_parser.rb +4 -4
- data/lib/eco/api/common/people/default_parsers/date_parser.rb +3 -3
- data/lib/eco/api/common/people/default_parsers/freemium_parser.rb +6 -6
- data/lib/eco/api/common/people/default_parsers/login_providers_parser.rb +3 -3
- data/lib/eco/api/common/people/default_parsers/multi_parser.rb +4 -4
- data/lib/eco/api/common/people/default_parsers/policy_groups_parser.rb +9 -6
- data/lib/eco/api/common/people/default_parsers/send_invites_parser.rb +6 -5
- data/lib/eco/api/common/people/default_parsers/xls_parser.rb +2 -2
- data/lib/eco/api/common/people/default_parsers.rb +1 -0
- data/lib/eco/api/common/people/entries.rb +16 -15
- data/lib/eco/api/common/people/person_entry.rb +53 -37
- data/lib/eco/api/common/people/person_parser.rb +8 -6
- data/lib/eco/api/common/people/supervisor_helpers.rb +3 -1
- data/lib/eco/api/common/session/logger/channels.rb +2 -1
- data/lib/eco/api/common/session/logger.rb +2 -2
- data/lib/eco/api/common/session/mailer/aws_provider.rb +3 -2
- data/lib/eco/api/common/session/mailer/provider_base.rb +2 -1
- data/lib/eco/api/common/session/mailer/sendgrid_provider.rb +9 -9
- data/lib/eco/api/common/session/mailer.rb +5 -3
- data/lib/eco/api/common/session/sftp.rb +11 -4
- data/lib/eco/api/common/version_patches/object.rb +2 -1
- data/lib/eco/api/custom/mailer.rb +1 -1
- data/lib/eco/api/error/handlers.rb +3 -3
- data/lib/eco/api/error.rb +17 -17
- data/lib/eco/api/microcases/people/apply_changes/set_account/account_excluded.rb +3 -11
- data/lib/eco/api/microcases/people/apply_changes/set_core/core_excluded.rb +4 -1
- data/lib/eco/api/microcases/people/manage/search.rb +3 -1
- data/lib/eco/api/organization/people.rb +1 -0
- data/lib/eco/api/policies.rb +2 -2
- data/lib/eco/api/session/batch/job/sets.rb +1 -0
- data/lib/eco/api/session/batch/job/type.rb +1 -0
- data/lib/eco/api/session/batch/job.rb +2 -2
- data/lib/eco/api/session/batch/launcher/valid_methods.rb +3 -2
- data/lib/eco/api/session/batch/launcher.rb +4 -5
- data/lib/eco/api/session/batch/searcher.rb +4 -4
- data/lib/eco/api/session/config/api.rb +2 -2
- data/lib/eco/api/session/config/apis/enviro_spaces.rb +2 -2
- data/lib/eco/api/session/config/post_launch.rb +7 -4
- data/lib/eco/api/session/config/sftp.rb +1 -1
- data/lib/eco/api/session/config/tagtree.rb +1 -1
- data/lib/eco/api/session/config/workflow.rb +4 -4
- data/lib/eco/api/session/config.rb +25 -24
- data/lib/eco/api/session.rb +4 -4
- data/lib/eco/api/usecases/base_case/model.rb +2 -1
- data/lib/eco/api/usecases/base_case/type.rb +2 -1
- data/lib/eco/api/usecases/base_io/validations.rb +6 -4
- data/lib/eco/api/usecases/cli/option.rb +5 -2
- data/lib/eco/api/usecases/default/people/amend/clear_abilities_case.rb +2 -2
- data/lib/eco/api/usecases/default/people/amend/restore_db_case.rb +16 -9
- data/lib/eco/api/usecases/default/people/treat/analyse_people_case.rb +20 -20
- data/lib/eco/api/usecases/default.rb +5 -5
- data/lib/eco/api/usecases/default_cases/to_csv_case.rb +8 -8
- data/lib/eco/api/usecases/default_cases/upsert_case.rb +4 -4
- data/lib/eco/api/usecases/graphql/helpers/base.rb +1 -1
- data/lib/eco/api/usecases/graphql/helpers/location/base/tree_tracking.rb +5 -1
- data/lib/eco/api/usecases/graphql/helpers/location/command/diffs/stages/commandable.rb +5 -3
- data/lib/eco/api/usecases/graphql/helpers/location/command/result.rb +3 -3
- data/lib/eco/api/usecases/graphql/helpers/location/command.rb +3 -0
- data/lib/eco/api/usecases/graphql/samples/location/command/dsl.rb +2 -2
- data/lib/eco/api/usecases/graphql/samples/location/command/service/tree_update.rb +9 -3
- data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff/convertible/inputable.rb +5 -4
- data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff/convertible/parsing.rb +5 -2
- data/lib/eco/api/usecases/graphql/samples/location/service/tree_diff.rb +3 -3
- data/lib/eco/api/usecases/graphql/utils/sftp.rb +1 -1
- data/lib/eco/api/usecases/lib/{file_pattern.rb → files/file_pattern.rb} +1 -1
- data/lib/eco/api/usecases/lib/{sftp.rb → files/sftp.rb} +19 -7
- data/lib/eco/api/usecases/lib/files.rb +7 -0
- data/lib/eco/api/usecases/lib.rb +1 -2
- data/lib/eco/api/usecases/ooze_cases/export_register_case.rb +5 -5
- data/lib/eco/api/usecases/ooze_samples/helpers/exportable_ooze.rb +14 -11
- data/lib/eco/api/usecases/ooze_samples/helpers_migration/copying.rb +14 -23
- data/lib/eco/api/usecases/ooze_samples/helpers_migration/typed_fields_pairing.rb +49 -27
- data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +9 -9
- data/lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb +1 -1
- data/lib/eco/api/usecases/ooze_samples/register_export_case.rb +25 -17
- data/lib/eco/api/usecases/ooze_samples/register_migration_case.rb +41 -24
- data/lib/eco/api/usecases/ooze_samples/register_update_case.rb +16 -15
- data/lib/eco/api/usecases/samples/drivers/cli/sftp_cli.rb +15 -15
- data/lib/eco/api/usecases/samples/drivers/cli/url_pull_cli.rb +5 -5
- data/lib/eco/api/usecases/samples/drivers/sftp_sample.rb +5 -3
- data/lib/eco/api/usecases/use_case.rb +6 -6
- data/lib/eco/api/usecases/use_case_chain/chaining.rb +6 -6
- data/lib/eco/api/usecases/use_case_chain.rb +4 -4
- data/lib/eco/api/usecases/use_case_io.rb +2 -1
- data/lib/eco/api/usecases.rb +9 -9
- data/lib/eco/cli/config/options_set.rb +4 -4
- data/lib/eco/cli/config/use_cases.rb +3 -3
- data/lib/eco/cli/scripting/argument.rb +1 -1
- data/lib/eco/cli_default/input.rb +9 -9
- data/lib/eco/cli_default/options.rb +125 -100
- data/lib/eco/cli_default/people.rb +3 -3
- data/lib/eco/cli_default/usecases.rb +83 -83
- data/lib/eco/cli_default/workflow.rb +7 -7
- data/lib/eco/data/files/helpers.rb +7 -5
- data/lib/eco/data/fuzzy_match/result.rb +69 -26
- data/lib/eco/data/fuzzy_match/results.rb +10 -10
- data/lib/eco/data/fuzzy_match/score.rb +13 -8
- data/lib/eco/data/fuzzy_match.rb +69 -50
- data/lib/eco/data/hashes/diff_result/meta.rb +2 -1
- data/lib/eco/data/locations/node_base/treeify.rb +13 -11
- data/lib/eco/data/locations/node_diff/accessors.rb +2 -1
- data/lib/eco/data/mapper.rb +4 -4
- data/lib/eco/language/auxiliar_logger.rb +4 -4
- data/lib/eco/language/delegation/chainable_delegator.rb +18 -0
- data/lib/eco/language/delegation/delegating_missing.rb +104 -0
- data/lib/eco/language/delegation/delegating_missing_const.rb +53 -0
- data/lib/eco/language/delegation/delegating_missing_on_class.rb +53 -0
- data/lib/eco/language/delegation/for_delegator/const_delegator.rb +66 -0
- data/lib/eco/language/delegation/for_delegator/const_lookup_hooks.rb +99 -0
- data/lib/eco/language/delegation/for_delegator/delegated_class.rb +71 -0
- data/lib/eco/language/delegation/for_delegator.rb +11 -0
- data/lib/eco/language/delegation.rb +10 -0
- data/lib/eco/language/klass/builder.rb +29 -0
- data/lib/eco/language/klass/helpers_built.rb +9 -0
- data/lib/eco/language/klass/hierarchy.rb +34 -0
- data/lib/eco/language/klass/inheritable_class_vars.rb +45 -0
- data/lib/eco/language/klass/naming.rb +21 -0
- data/lib/eco/language/klass/resolver.rb +30 -0
- data/lib/eco/language/klass/when_inherited.rb +11 -13
- data/lib/eco/language/klass.rb +6 -0
- data/lib/eco/language/methods.rb +0 -1
- data/lib/eco/language/models/class_helpers.rb +25 -23
- data/lib/eco/language/models/collection.rb +12 -2
- data/lib/eco/language/strings/underscore.rb +17 -0
- data/lib/eco/language/strings.rb +8 -0
- data/lib/eco/language.rb +2 -0
- data/lib/eco/version.rb +1 -1
- metadata +39 -7
- 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
|
-
|
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
|
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:
|
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)
|
data/lib/eco/api/usecases/lib.rb
CHANGED
@@ -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
|
3
|
+
name 'export-register'
|
4
4
|
type :other
|
5
5
|
batch_size 5
|
6
6
|
|
7
7
|
def main(session, options, usecase)
|
8
|
-
super
|
8
|
+
super do
|
9
9
|
# Save the File
|
10
|
-
CSV.open(filename,
|
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) {
|
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 =
|
8
|
+
MERGE_DELIMITER = '#:#'.freeze
|
9
9
|
META_FIELDS = {
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
34
|
+
value = nil unless value && !value.empty?
|
35
35
|
return value if value || !default
|
36
|
-
|
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
|
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(
|
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
|
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
|
139
|
+
when 'plain_text', 'date', 'number', 'gauge'
|
139
140
|
dst.value = src.value
|
140
|
-
when
|
141
|
+
when 'rich_text'
|
141
142
|
dst.content = src.content
|
142
|
-
when
|
143
|
+
when 'cross_reference'
|
143
144
|
src.reference_ids.each {|id| dst.add(id)}
|
144
|
-
when
|
145
|
+
when 'people'
|
145
146
|
dst.people_ids << src.people_ids.to_a
|
146
|
-
when
|
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
|
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
|
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
|
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
|
169
|
+
when 'law', 'page_action', 'actions_list', 'signature'
|
169
170
|
"won't copy"
|
170
|
-
when
|
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 = [
|
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
|
24
|
-
@dst
|
25
|
-
@src_excluded
|
26
|
-
@dst_excluded
|
27
|
-
@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
|
41
|
-
|
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
|
-
|
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
|
55
|
-
|
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
|
-
|
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
|
-
|
70
|
-
msg
|
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?(
|
138
|
-
same_string?(
|
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:
|
144
|
-
mild:
|
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]
|
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
|
-
|
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?(
|
240
|
+
fld && fld.tooltip.to_s.include?('ximport')
|
219
241
|
end
|
220
242
|
|
221
243
|
def reset!
|
222
|
-
@src_unpaired
|
223
|
-
@dst_unpaired
|
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
|
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 =
|
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[
|
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
|
194
|
-
msg
|
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)[
|
205
|
+
object && patch_doc(object)['page']
|
206
206
|
end
|
207
207
|
|
208
208
|
def backup_patch!(ooze = target)
|
209
|
-
unless (patch = (patch_doc(ooze) || {})[
|
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,
|
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) || {})[
|
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
|
9
|
+
super do
|
10
10
|
if method(:process_ooze).parameters.count.zero?
|
11
11
|
ooze # retrieve ooze
|
12
12
|
process_ooze
|