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
@@ -15,7 +15,7 @@ class Eco::API::UseCases::OozeSamples::RegisterExportCase < Eco::API::Common::Lo
|
|
15
15
|
|
16
16
|
include Eco::API::UseCases::OozeSamples::Helpers
|
17
17
|
|
18
|
-
name
|
18
|
+
name 'register-export-case'
|
19
19
|
type :other
|
20
20
|
|
21
21
|
attr_reader :session, :options, :usecase
|
@@ -58,29 +58,29 @@ class Eco::API::UseCases::OozeSamples::RegisterExportCase < Eco::API::Common::Lo
|
|
58
58
|
# @param ooze_id [String]
|
59
59
|
# @return [Ecoportal::API::V2::Page]
|
60
60
|
def build_full_ooze(ooze_id) # rubocop:disable Metrics/AbcSize
|
61
|
-
return
|
61
|
+
return unless (page = ooze(ooze_id))
|
62
62
|
return page unless page.is_a?(Ecoportal::API::V2::Pages::PageStage)
|
63
63
|
|
64
64
|
pending_stage_ids = page.stages.ordered.map(&:id) - [page.current_stage_id]
|
65
65
|
state = page.state
|
66
66
|
secs_doc = page.sections.doc
|
67
67
|
flds_doc = page.components.doc
|
68
|
-
hsecs = secs_doc.each_with_object({}) {|sec, h| h[sec[
|
69
|
-
hflds = flds_doc.each_with_object({}) {|fld, h| h[fld[
|
68
|
+
hsecs = secs_doc.each_with_object({}) {|sec, h| h[sec['id']] = sec}
|
69
|
+
hflds = flds_doc.each_with_object({}) {|fld, h| h[fld['id']] = fld}
|
70
70
|
|
71
71
|
pending_stage_ids.each do |id|
|
72
72
|
next unless (other_stage = stage(id, ooze: page))
|
73
73
|
|
74
|
-
state =
|
74
|
+
state = 'inprogress' unless other_stage.state == 'complete'
|
75
75
|
other_stage.sections.doc.each do |sec_doc|
|
76
|
-
unless hsecs.key?(id = sec_doc[
|
76
|
+
unless hsecs.key?(id = sec_doc['id'])
|
77
77
|
hsecs[id] = sec_doc
|
78
78
|
secs_doc << sec_doc
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
82
|
other_stage.components.doc.each do |comp_doc|
|
83
|
-
unless hflds.key?(id = comp_doc[
|
83
|
+
unless hflds.key?(id = comp_doc['id'])
|
84
84
|
hflds[id] = comp_doc
|
85
85
|
flds_doc << comp_doc
|
86
86
|
end
|
@@ -93,21 +93,27 @@ class Eco::API::UseCases::OozeSamples::RegisterExportCase < Eco::API::Common::Lo
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def batched_search_results
|
96
|
-
|
96
|
+
msg = "Missing block. It yields in slices of #{self.class.batch_size} results"
|
97
|
+
raise msg unless block_given?
|
98
|
+
|
97
99
|
results_preview
|
98
100
|
results = []
|
101
|
+
|
99
102
|
apiv2.registers.search(register_id, search_options) do |page_result|
|
100
103
|
results << page_result
|
104
|
+
|
101
105
|
if results.length >= self.class.batch_size
|
102
106
|
yield(results)
|
103
107
|
results = []
|
104
108
|
end
|
105
109
|
end
|
110
|
+
|
106
111
|
yield(results) unless results.empty?
|
107
112
|
end
|
108
113
|
|
109
114
|
def ooze(ooze_id = nil, stage_id: nil)
|
110
115
|
return target unless ooze_id
|
116
|
+
|
111
117
|
apiv2.pages.get(ooze_id, stage_id: stage_id).tap do |ooze|
|
112
118
|
if ooze
|
113
119
|
new_target(ooze)
|
@@ -143,21 +149,22 @@ class Eco::API::UseCases::OozeSamples::RegisterExportCase < Eco::API::Common::Lo
|
|
143
149
|
end
|
144
150
|
|
145
151
|
def default_proceed
|
146
|
-
|
152
|
+
'Y'
|
147
153
|
end
|
148
154
|
|
149
155
|
def results_preview
|
150
156
|
apiv2.registers.search(register_id, search_options.merge(only_first: true)).tap do |search_results|
|
151
157
|
str_results = "Total target entries: #{search_results.total} (out of #{search_results.total_before_filtering})"
|
152
158
|
session.prompt_user(
|
153
|
-
|
159
|
+
'Do you want to proceed (y/N):',
|
154
160
|
explanation: str_results,
|
155
161
|
default: default_proceed,
|
156
162
|
timeout: 10
|
157
163
|
) do |res|
|
158
|
-
next if res.upcase.start_with?(
|
159
|
-
|
160
|
-
|
164
|
+
next if res.upcase.start_with?('Y')
|
165
|
+
|
166
|
+
puts '...'
|
167
|
+
log(:info) { 'Aborting script...' }
|
161
168
|
exit(0)
|
162
169
|
end
|
163
170
|
end
|
@@ -165,20 +172,21 @@ class Eco::API::UseCases::OozeSamples::RegisterExportCase < Eco::API::Common::Lo
|
|
165
172
|
|
166
173
|
def search_options
|
167
174
|
@search_options ||= {}.tap do |opts|
|
168
|
-
opts.merge!(sort:
|
169
|
-
opts.merge!(dir:
|
175
|
+
opts.merge!(sort: 'created_at')
|
176
|
+
opts.merge!(dir: 'asc')
|
170
177
|
opts.merge!(query: conf_search) if conf_search
|
171
178
|
opts.merge!(filters: conf_filters)
|
172
179
|
end
|
173
180
|
end
|
174
181
|
|
175
182
|
def conf_filters
|
176
|
-
return filters if respond_to?(:filters)
|
183
|
+
return filters if respond_to?(:filters, true)
|
184
|
+
|
177
185
|
[]
|
178
186
|
end
|
179
187
|
|
180
188
|
def conf_search
|
181
|
-
search if respond_to?(:search)
|
189
|
+
search if respond_to?(:search, true)
|
182
190
|
end
|
183
191
|
|
184
192
|
def register_id
|
@@ -47,9 +47,9 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
47
47
|
@csv = []
|
48
48
|
super(session, options, usecase, &block)
|
49
49
|
else
|
50
|
-
CSV.open(out_csv_filename,
|
50
|
+
CSV.open(out_csv_filename, 'w') do |csv|
|
51
51
|
@csv = csv
|
52
|
-
csv << [
|
52
|
+
csv << %w[src_page_id dst_page_id]
|
53
53
|
super(session, options, usecase, &block)
|
54
54
|
end
|
55
55
|
log(:info) { "File '#{out_csv_filename}' has been created." }
|
@@ -64,11 +64,11 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
64
64
|
# # More custom logics
|
65
65
|
# end
|
66
66
|
|
67
|
-
def process_ooze
|
67
|
+
def process_ooze # rubocop:disable Metrics/AbcSize
|
68
68
|
with_target_stage(self.class::SOURCE_STAGE) do |source|
|
69
69
|
draft_reference = object_reference(source)
|
70
70
|
creating_new_page(draft_reference, template_id: elf.class::TEMPLATE_ID) do |draft|
|
71
|
-
draft.base_tags << [
|
71
|
+
draft.base_tags << %w[IMPORTED MIGRATED]
|
72
72
|
|
73
73
|
pairing_tracking = copy_pairings(source, draft)
|
74
74
|
|
@@ -78,17 +78,24 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
78
78
|
yield(draft, source, fields_tracker: pairing_tracking)
|
79
79
|
end
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
81
|
+
msg = pairing_tracking.report_src_unpaired(
|
82
|
+
only_present: !self.class::REPORT_SRC_EMTPY,
|
83
|
+
only_indexed: !self.class::REPORT_SRC_DEINDEX
|
84
|
+
)
|
85
|
+
log(:warn) { msg } if msg
|
86
|
+
|
87
|
+
msg = pairing_tracking.report_multi_pairs(
|
88
|
+
only_present: !self.class::REPORT_SRC_EMTPY,
|
89
|
+
only_indexed: !self.class::REPORT_SRC_DEINDEX,
|
90
|
+
dst_exclude_ximport: !self.class::REPORT_DST_XIMPORT
|
91
|
+
)
|
92
|
+
log(:warn) { msg } if msg
|
93
|
+
|
94
|
+
msg = pairing_tracking.report_dst_unpaired(
|
95
|
+
only_required: false,
|
96
|
+
exclude_ximport: !self.class::REPORT_DST_XIMPORT
|
97
|
+
)
|
98
|
+
log(:warn) { msg } if msg
|
92
99
|
end
|
93
100
|
end
|
94
101
|
end
|
@@ -101,8 +108,18 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
101
108
|
src_excluded: excluded_fields(src),
|
102
109
|
dst_excluded: excluded_fields(dst)
|
103
110
|
}
|
104
|
-
copy_generic_paired_fields(
|
105
|
-
|
111
|
+
copy_generic_paired_fields(
|
112
|
+
src,
|
113
|
+
dst,
|
114
|
+
**params.merge(exclude_ximport: self.class::EXCLUDE_XIMPORT),
|
115
|
+
&after_copy
|
116
|
+
).tap do |pairs_track|
|
117
|
+
copy_mapped_fields(
|
118
|
+
src,
|
119
|
+
dst,
|
120
|
+
**params.merge(fields_tracker: pairs_track),
|
121
|
+
&after_copy
|
122
|
+
)
|
106
123
|
end
|
107
124
|
end
|
108
125
|
|
@@ -110,7 +127,8 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
110
127
|
return [] unless respond_to?(:excluded_field_hooks, true)
|
111
128
|
excluded_field_hooks.each_with_object([]) do |(type, hooks), excluded|
|
112
129
|
hooks.each do |hook|
|
113
|
-
type =
|
130
|
+
type = nil if type == 'all'
|
131
|
+
|
114
132
|
excluded.push(*with_fields(entry, label: to_regex(hook), type: type))
|
115
133
|
end
|
116
134
|
end
|
@@ -125,7 +143,8 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
125
143
|
def copy_mapped_fields(src, dst, **kargs, &after_copy)
|
126
144
|
return [] unless field_maps?
|
127
145
|
field_maps.each do |type, field_hooks|
|
128
|
-
type =
|
146
|
+
type = nil if type == 'all'
|
147
|
+
|
129
148
|
field_hooks.each do |hook_name|
|
130
149
|
copy_hooked_fields(src, dst, hook: hook_name, type: type, **kargs, &after_copy)
|
131
150
|
end
|
@@ -137,17 +156,15 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
137
156
|
end
|
138
157
|
|
139
158
|
def callback(sym)
|
140
|
-
if callback?(sym)
|
141
|
-
method(callback_name(sym))
|
142
|
-
end
|
159
|
+
method(callback_name(sym)) if callback?(sym)
|
143
160
|
end
|
144
161
|
|
145
162
|
def callback_name(sym)
|
146
|
-
"#{sym}_callback"
|
163
|
+
:"#{sym}_callback"
|
147
164
|
end
|
148
165
|
|
149
166
|
def with_target_stage(name)
|
150
|
-
if stg = target_stage(name)
|
167
|
+
if (stg = target_stage(name))
|
151
168
|
yield(stg)
|
152
169
|
else
|
153
170
|
log(:warn) { "Entry '#{target.id}' does not have stage '#{name}'" }
|
@@ -15,7 +15,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
name
|
18
|
+
name 'register-update-case'
|
19
19
|
type :other
|
20
20
|
|
21
21
|
attr_reader :retrieved_oozes, :non_retrieved_oozes
|
@@ -33,7 +33,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
33
33
|
process_ooze(&block)
|
34
34
|
end
|
35
35
|
elsif mode == :delegate
|
36
|
-
raise
|
36
|
+
raise 'You need to pass a block when running main in `:delegate` mode' unless block_given?
|
37
37
|
yield
|
38
38
|
end
|
39
39
|
end
|
@@ -42,7 +42,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def process_ooze(_ooze = target)
|
45
|
-
raise
|
45
|
+
raise 'You need to define this method'
|
46
46
|
end
|
47
47
|
|
48
48
|
private
|
@@ -63,8 +63,8 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
63
63
|
|
64
64
|
def new_target(object, warn_pending_changes: false)
|
65
65
|
enqueue(object)
|
66
|
-
super
|
67
|
-
#enqueue(pending)
|
66
|
+
super do |pending|
|
67
|
+
# enqueue(pending)
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
@@ -79,7 +79,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
79
79
|
end
|
80
80
|
|
81
81
|
if (pending = queue_shift(page_result.id)) && dirty?(pending)
|
82
|
-
msg =
|
82
|
+
msg = 'Inconsistent search results. '
|
83
83
|
msg << "Launching update on '#{object_reference(pending)}' to be able to queue it back"
|
84
84
|
log(:warn) { msg }
|
85
85
|
update_ooze(pending)
|
@@ -186,7 +186,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
186
186
|
end
|
187
187
|
|
188
188
|
def backup_patch!(ooze = target)
|
189
|
-
return if (patch_doc(ooze) || {})[
|
189
|
+
return if (patch_doc(ooze) || {})['page']
|
190
190
|
|
191
191
|
log(:info) {
|
192
192
|
"No changes to update for #{object_reference(ooze)}."
|
@@ -198,17 +198,17 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
198
198
|
@total_search_oozes = search_results.total
|
199
199
|
|
200
200
|
str_results = "Total target entries: #{search_results.total} (out of #{search_results.total_before_filtering})"
|
201
|
-
default_answer = session.config.run_mode_remote??
|
201
|
+
default_answer = session.config.run_mode_remote?? 'Y' : 'N'
|
202
202
|
|
203
203
|
session.prompt_user(
|
204
|
-
|
204
|
+
'Do you want to proceed (y/N):',
|
205
205
|
explanation: str_results,
|
206
206
|
default: default_answer,
|
207
207
|
timeout: 10
|
208
208
|
) do |res|
|
209
|
-
next if res.upcase.start_with?(
|
210
|
-
puts
|
211
|
-
log(:info) {
|
209
|
+
next if res.upcase.start_with?('Y')
|
210
|
+
puts '...'
|
211
|
+
log(:info) { 'Aborting script...' }
|
212
212
|
exit(0)
|
213
213
|
end
|
214
214
|
end
|
@@ -233,7 +233,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
233
233
|
|
234
234
|
def kpis_message
|
235
235
|
msg = []
|
236
|
-
msg <<
|
236
|
+
msg << 'Run end:'
|
237
237
|
msg << " * Search results: #{total_search_oozes}"
|
238
238
|
msg << " * Duplicated search results #{dupped_search_oozes}"
|
239
239
|
msg << " * Retrieved a total of #{retrieved_oozes}"
|
@@ -254,12 +254,13 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
254
254
|
end
|
255
255
|
|
256
256
|
def conf_filters
|
257
|
-
return filters if respond_to?(:filters)
|
257
|
+
return filters if respond_to?(:filters, true)
|
258
|
+
|
258
259
|
[]
|
259
260
|
end
|
260
261
|
|
261
262
|
def conf_search
|
262
|
-
search if respond_to?(:search)
|
263
|
+
search if respond_to?(:search, true)
|
263
264
|
end
|
264
265
|
|
265
266
|
def register_id
|
@@ -1,45 +1,45 @@
|
|
1
1
|
class Eco::API::UseCases::Samples::Drivers::Sftp
|
2
2
|
class Cli < Eco::API::UseCases::Cli
|
3
|
-
desc
|
3
|
+
desc 'SFTP case: manages remote files that match a file pattern'
|
4
4
|
|
5
|
-
add_option(
|
6
|
-
pattern_const = SCR.get_arg(
|
5
|
+
add_option('-file-pattern-const', 'Constant that should be used as a pattern') do |options|
|
6
|
+
pattern_const = SCR.get_arg('-file-pattern-const', with_param: true)
|
7
7
|
options.deep_merge!(sftp: {file_pattern_const: pattern_const})
|
8
8
|
end
|
9
9
|
|
10
|
-
add_option(
|
10
|
+
add_option('-list', 'It lists all the files present in the remote folder for the current environment.') do |options|
|
11
11
|
options.deep_merge!(sftp: {command: :list})
|
12
12
|
end
|
13
13
|
|
14
|
-
add_option(
|
14
|
+
add_option('-get-last', 'It gets the last file present in the remote folder for the current environment.') do |options|
|
15
15
|
options.deep_merge!(sftp: {command: :get_last})
|
16
16
|
end
|
17
17
|
|
18
|
-
add_option(
|
18
|
+
add_option('-get', 'It gets all the files present in the remote folder for the current environment.') do |options|
|
19
19
|
options.deep_merge!(sftp: {command: :get})
|
20
20
|
end
|
21
21
|
|
22
|
-
add_option(
|
22
|
+
add_option('-archive', 'It moves all the files present in the remote folder to the archive subfolder.') do |options|
|
23
23
|
options.deep_merge!(sftp: {command: :archive})
|
24
24
|
end
|
25
25
|
|
26
|
-
add_option(
|
27
|
-
local_folder = SCR.get_file(
|
26
|
+
add_option('-local-folder', 'Local folder to pull the remote files to.') do |options|
|
27
|
+
local_folder = SCR.get_file('-local-folder', required: true, should_exist: true)
|
28
28
|
options.deep_merge!(sftp: {local_folder: local_folder})
|
29
29
|
end
|
30
30
|
|
31
|
-
add_option(
|
32
|
-
remote_subfolder = SCR.get_arg(
|
31
|
+
add_option('-remote-subfolder', 'Remote sub folder to pull the remote files from.') do |options|
|
32
|
+
remote_subfolder = SCR.get_arg('-remote-subfolder', with_param: true)
|
33
33
|
options.deep_merge!(sftp: {remote_subfolder: remote_subfolder})
|
34
34
|
end
|
35
35
|
|
36
|
-
add_option(
|
37
|
-
remote_target_folder = SCR.get_arg(
|
36
|
+
add_option('-remote-target-folder', 'Overrides -remote-subfolder and -remote-folder.') do |options|
|
37
|
+
remote_target_folder = SCR.get_arg('-remote-target-folder', with_param: true)
|
38
38
|
options.deep_merge!(sftp: {remote_target_folder: remote_target_folder})
|
39
39
|
end
|
40
40
|
|
41
|
-
add_option(
|
42
|
-
remote_folder = SCR.get_arg(
|
41
|
+
add_option('-remote-folder', 'Overrides -remote-folder (but not -remote-subfolder).') do |options|
|
42
|
+
remote_folder = SCR.get_arg('-remote-folder', with_param: true)
|
43
43
|
options.deep_merge!(sftp: {remote_folder: remote_folder})
|
44
44
|
end
|
45
45
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
class Eco::API::UseCases::Samples::Drivers::UrlPull
|
2
2
|
class Cli < Eco::API::UseCases::Cli
|
3
|
-
desc
|
3
|
+
desc 'Url Pull sample: pull the file from a specific URL'
|
4
4
|
|
5
|
-
add_option(
|
6
|
-
url_const = SCR.get_arg(
|
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
7
|
options.deep_merge!(url_pull: {target_url_const: url_const})
|
8
8
|
end
|
9
9
|
|
10
|
-
add_option(
|
11
|
-
local_folder = SCR.get_file(
|
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
12
|
options.deep_merge!(url_pull: {local_folder: local_folder})
|
13
13
|
end
|
14
14
|
end
|
@@ -5,8 +5,8 @@ class Eco::API::UseCases::Samples::Drivers::Sftp < Eco::API::Common::Loaders::Us
|
|
5
5
|
name 'sftp'
|
6
6
|
type :other
|
7
7
|
|
8
|
-
include Eco::API::UseCases::Lib::Sftp
|
9
|
-
include Eco::API::UseCases::Lib::FilePattern
|
8
|
+
include Eco::API::UseCases::Lib::Files::Sftp
|
9
|
+
include Eco::API::UseCases::Lib::Files::FilePattern
|
10
10
|
|
11
11
|
def main(session, options, _usecase)
|
12
12
|
options[:end_get] = false
|
@@ -37,7 +37,9 @@ class Eco::API::UseCases::Samples::Drivers::Sftp < Eco::API::Common::Loaders::Us
|
|
37
37
|
|
38
38
|
file_names = files.map {|file| to_remote_path(file.name)}
|
39
39
|
|
40
|
-
|
40
|
+
msg = "Getting the following files into the local folder "
|
41
|
+
msg << "'#{local_folder || '.'}':"
|
42
|
+
puts msg
|
41
43
|
puts file_names
|
42
44
|
|
43
45
|
sftp.download(file_names, local_folder: local_folder)
|
@@ -106,32 +106,32 @@ module Eco
|
|
106
106
|
|
107
107
|
if dt
|
108
108
|
@data = dt
|
109
|
-
singleton_class.attr_reader(:data) unless respond_to?(:data)
|
109
|
+
singleton_class.attr_reader(:data) unless respond_to?(:data, true)
|
110
110
|
|
111
111
|
case mdl
|
112
112
|
when :people
|
113
113
|
@people = dt
|
114
|
-
singleton_class.attr_reader(:people) unless respond_to?(:people)
|
114
|
+
singleton_class.attr_reader(:people) unless respond_to?(:people, true)
|
115
115
|
when :contractors
|
116
116
|
@contractors = dt
|
117
|
-
singleton_class.attr_reader(:contractors) unless respond_to?(:contractors)
|
117
|
+
singleton_class.attr_reader(:contractors) unless respond_to?(:contractors, true)
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
121
|
if ent # entries/input
|
122
122
|
@input = ent
|
123
|
-
singleton_class.attr_reader(:input) unless respond_to?(:input)
|
123
|
+
singleton_class.attr_reader(:input) unless respond_to?(:input, true)
|
124
124
|
|
125
125
|
# Below problematic code... usage has cases where entries = (gets assigned)
|
126
126
|
# @entries = ent
|
127
|
-
# singleton_class.attr_reader(:entries) unless respond_to?(:entries)
|
127
|
+
# singleton_class.attr_reader(:entries) unless respond_to?(:entries, true)
|
128
128
|
end
|
129
129
|
|
130
130
|
# `self` is the use case itself (when used the Loader)
|
131
131
|
next unless is_a?(Eco::API::Common::Loaders::CaseBase)
|
132
132
|
|
133
133
|
@usecase = use_case_self
|
134
|
-
singleton_class.attr_reader(:usecase) unless respond_to?(:usecase)
|
134
|
+
singleton_class.attr_reader(:usecase) unless respond_to?(:usecase, true)
|
135
135
|
end
|
136
136
|
|
137
137
|
true
|
@@ -37,10 +37,10 @@ class Eco::API::UseCases::UseCaseChain
|
|
37
37
|
msg << "Looks like a recursive cyclic chain 'use'"
|
38
38
|
raise msg if @@num_chains >= MAX_CHAINS
|
39
39
|
|
40
|
-
msg =
|
40
|
+
msg = 'A UseCase can only be chained with another UseCase'
|
41
41
|
raise msg if usecase && !usecase.is_a?(UseCase)
|
42
42
|
|
43
|
-
msg =
|
43
|
+
msg = 'Missuse. Please use either parameter or block but not both'
|
44
44
|
raise msg if block_given? && usecase
|
45
45
|
|
46
46
|
usecase = block if block_given?
|
@@ -51,7 +51,7 @@ class Eco::API::UseCases::UseCaseChain
|
|
51
51
|
protected
|
52
52
|
|
53
53
|
def chain_to(usecase)
|
54
|
-
msg =
|
54
|
+
msg = 'A UseCase can only be chained with another UseCase'
|
55
55
|
raise msg if usecase && !usecase.is_a?(UseCase)
|
56
56
|
|
57
57
|
usecase.chain(self)
|
@@ -60,7 +60,7 @@ class Eco::API::UseCases::UseCaseChain
|
|
60
60
|
def resolved_chains(use_group = nil)
|
61
61
|
return @resolved_chains if @resolved_chains
|
62
62
|
|
63
|
-
msg =
|
63
|
+
msg = 'Only Eco::API::UseCases object can contain resolved chains. '
|
64
64
|
msg << "Given: #{use_group.class}"
|
65
65
|
raise msg if use_group && !use_group.is_a?(Eco::API::UseCases)
|
66
66
|
|
@@ -68,7 +68,7 @@ class Eco::API::UseCases::UseCaseChain
|
|
68
68
|
@resolved_chains = @chains.map do |usecase|
|
69
69
|
usecase = usecase.call(use_group) if usecase.respond_to?(:call)
|
70
70
|
|
71
|
-
msg =
|
71
|
+
msg = 'A UseCase can only be chained with another UseCase'
|
72
72
|
raise msg if usecase && !usecase.is_a?(UseCase)
|
73
73
|
|
74
74
|
usecase.resolved_chains(use_group) if usecase.respond_to?(:resolved_chains)
|
@@ -81,7 +81,7 @@ class Eco::API::UseCases::UseCaseChain
|
|
81
81
|
private
|
82
82
|
|
83
83
|
def reset_chains!
|
84
|
-
@chains
|
84
|
+
@chains = []
|
85
85
|
@resolved_chains = nil
|
86
86
|
end
|
87
87
|
end
|
@@ -8,7 +8,7 @@ module Eco
|
|
8
8
|
|
9
9
|
def initialize(name = nil, root:, type: nil, model: nil, usecase: nil, &block)
|
10
10
|
if usecase
|
11
|
-
msg =
|
11
|
+
msg = 'Expected Eco::API::UseCases::UseCase. '
|
12
12
|
msg << "Given #{usecase.class}"
|
13
13
|
raise msg unless usecase.is_a?(Eco::API::UseCases::UseCase)
|
14
14
|
|
@@ -25,14 +25,14 @@ module Eco
|
|
25
25
|
def root=(value)
|
26
26
|
return super unless @resolved_chains # rubocop:disable Lint/ReturnInVoidContext
|
27
27
|
|
28
|
-
msg =
|
29
|
-
msg <<
|
28
|
+
msg = 'You cannot change root Eco::API::UseCases '
|
29
|
+
msg << 'once the chains have been resolved'
|
30
30
|
raise msg
|
31
31
|
end
|
32
32
|
|
33
33
|
# @see Eco::API::UseCases::UseCase#launch
|
34
34
|
def launch(io: nil, **kargs)
|
35
|
-
super
|
35
|
+
super.tap do |uio|
|
36
36
|
next if resolved_chains.empty?
|
37
37
|
|
38
38
|
resolved_chains.each do |usecase|
|
@@ -27,6 +27,7 @@ module Eco
|
|
27
27
|
def new(usecase:, **kargs)
|
28
28
|
default = { usecase: usecase }
|
29
29
|
default.merge!(job: @job) if @job
|
30
|
+
|
30
31
|
super(**default.merge(kargs))
|
31
32
|
end
|
32
33
|
|
@@ -59,7 +60,7 @@ module Eco
|
|
59
60
|
# @see Eco::API::UseCases::BaseIO#params
|
60
61
|
# Same as its superclass but adding `usecase` and `job` parameters
|
61
62
|
def params(keyed: false, all: false)
|
62
|
-
super
|
63
|
+
super.tap do |res|
|
63
64
|
if keyed
|
64
65
|
res.merge!(usecase: usecase)
|
65
66
|
res.merge!(job: @job) if @job
|
data/lib/eco/api/usecases.rb
CHANGED
@@ -4,17 +4,17 @@ module Eco
|
|
4
4
|
class UseCases
|
5
5
|
class UnknownCase < StandardError
|
6
6
|
def initialize(msg = nil, case_name: nil, type: nil)
|
7
|
-
msg ||=
|
8
|
-
msg
|
9
|
-
msg
|
7
|
+
msg ||= 'Unknown case'
|
8
|
+
msg << ". Case name '#{case_name}'" if case_name
|
9
|
+
msg << ". Case type '#{type}'" if type
|
10
10
|
super(msg)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
class AmbiguousCaseReference < StandardError
|
15
15
|
def initialize(msg = nil, case_name: nil)
|
16
|
-
msg ||=
|
17
|
-
msg
|
16
|
+
msg ||= 'You must specify type when there are multiple cases with same name'
|
17
|
+
msg << ". Case name '#{case_name}'" if case_name
|
18
18
|
super(msg)
|
19
19
|
end
|
20
20
|
end
|
@@ -22,8 +22,8 @@ module Eco
|
|
22
22
|
extend Eco::API::Common::ClassAutoLoader
|
23
23
|
include Enumerable
|
24
24
|
|
25
|
-
autoloads_children_of
|
26
|
-
autoload_namespace_ignore
|
25
|
+
autoloads_children_of 'Eco::API::Common::Loaders::UseCase'
|
26
|
+
autoload_namespace_ignore 'Eco::API'
|
27
27
|
|
28
28
|
def initialize
|
29
29
|
@usecases = {}
|
@@ -160,11 +160,11 @@ module Eco
|
|
160
160
|
end
|
161
161
|
|
162
162
|
def name(key)
|
163
|
-
key.to_s.split(
|
163
|
+
key.to_s.split(':').first
|
164
164
|
end
|
165
165
|
|
166
166
|
def type
|
167
|
-
key.to_s.split(
|
167
|
+
key.to_s.split(':').last&.to_sym
|
168
168
|
end
|
169
169
|
end
|
170
170
|
end
|