eco-helpers 2.4.8 → 2.5.1
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 +44 -1
- data/eco-helpers.gemspec +17 -17
- data/lib/eco/api/common/class_auto_loader.rb +8 -3
- data/lib/eco/api/common/loaders/base.rb +5 -1
- data/lib/eco/api/common/loaders/case_base.rb +2 -3
- data/lib/eco/api/common/people/default_parsers/csv_parser.rb +97 -47
- data/lib/eco/api/common/people/default_parsers/select_parser.rb +2 -2
- data/lib/eco/api/common/people/default_parsers/xls_parser.rb +0 -1
- data/lib/eco/api/common/people/entry_factory.rb +13 -8
- data/lib/eco/api/common/people/person_attribute_parser.rb +1 -1
- data/lib/eco/api/common/people/person_entry_attribute_mapper.rb +2 -2
- data/lib/eco/api/common/people/person_parser.rb +1 -1
- data/lib/eco/api/common/session/base_session.rb +1 -2
- data/lib/eco/api/common/session/environment.rb +6 -10
- data/lib/eco/api/common/session/helpers/prompt_user.rb +18 -18
- data/lib/eco/api/common/session/logger.rb +2 -2
- data/lib/eco/api/common/session/mailer.rb +1 -3
- data/lib/eco/api/common/session/s3_uploader.rb +1 -3
- data/lib/eco/api/common/session/sftp.rb +6 -4
- data/lib/eco/api/common/version_patches/ecoportal_api/external_person.rb +5 -4
- data/lib/eco/api/error.rb +5 -5
- data/lib/eco/api/session/config/api.rb +4 -2
- data/lib/eco/api/usecases/base_case.rb +0 -2
- data/lib/eco/api/usecases/base_io.rb +0 -3
- data/lib/eco/api/usecases/default_cases/samples/sftp_case.rb +1 -1
- data/lib/eco/api/usecases/ooze_samples/ooze_from_doc_case.rb +1 -2
- data/lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb +0 -1
- data/lib/eco/api/usecases/ooze_samples/ooze_update_case.rb +0 -1
- data/lib/eco/api/usecases/ooze_samples/register_export_case.rb +1 -1
- data/lib/eco/api/usecases/ooze_samples/register_update_case.rb +0 -2
- data/lib/eco/api/usecases/ooze_samples/target_oozes_update_case.rb +0 -1
- data/lib/eco/api/usecases/ooze_samples.rb +0 -1
- data/lib/eco/api/usecases/use_case.rb +30 -1
- data/lib/eco/api/usecases/use_case_chain.rb +1 -4
- data/lib/eco/api/usecases/use_case_io.rb +0 -2
- data/lib/eco/api/usecases.rb +4 -4
- data/lib/eco/api.rb +0 -2
- data/lib/eco/cli/config/default/options.rb +11 -1
- data/lib/eco/cli/scripting/arguments.rb +1 -1
- data/lib/eco/csv.rb +4 -7
- data/lib/eco/data/files/directory.rb +0 -3
- data/lib/eco/data/files/encoding.rb +75 -0
- data/lib/eco/data/files/helpers.rb +15 -37
- data/lib/eco/data/files.rb +1 -0
- data/lib/eco/data/fuzzy_match.rb +8 -4
- data/lib/eco/data.rb +0 -1
- data/lib/eco/version.rb +1 -1
- data/lib/eco-helpers.rb +1 -1
- metadata +23 -24
- data/lib/eco/data/crypto/encryption.rb +0 -321
- data/lib/eco/data/crypto.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b15015d62d69b57bfaef2e33cb9800786806f1796621f8a7c3fdc570bec81c99
|
4
|
+
data.tar.gz: 046b93c466ef6999e97c2d17584d4e760c3d6592783448c4fed3aed2edd3a0d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '079b89d982758de246c8f81fcc5e8853fdcc75c217f1b7e417408b9234a8a942aa874e77705fe62c0863699bf72dcf666297894b6febdb3f47bcb740af2d438e'
|
7
|
+
data.tar.gz: 7feaa9e6022432a50c3fab188283e6af6566a8fe9de7b84fd3dcfba4584c64fd02cc5d926f3f50db8a44f139138844438345222d941b7407a6f4369b257ca070
|
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,55 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
-
## [2.
|
4
|
+
## [2.5.2] - 2023-06-xx
|
5
5
|
|
6
6
|
### Added
|
7
7
|
### Changed
|
8
8
|
### Fixed
|
9
9
|
|
10
|
+
## [2.5.1] - 2023-06-06
|
11
|
+
|
12
|
+
### Added
|
13
|
+
- `Eco::API::Common::Session:SFTP#host` method
|
14
|
+
- New options to control csv headers check (`Eco::API::Common::People::DefaultParsers::CSVParser`)
|
15
|
+
- `Eco::API::Common::Loaders::CaseBase` add to the setter the `@usecase`
|
16
|
+
- Implemented via `Eco::API::UseCases::UseCase`
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
- Dry out dependency loading.
|
20
|
+
- `ecoportal-api` **gem** remains as eager loading.
|
21
|
+
- Patch `Ecoportal::API::V1::Person` with `include`
|
22
|
+
- Upgraded `ecoportal-api-graphql` **gem**
|
23
|
+
- `Eco::API::Common::People::PersonEntryAttributeMapper`
|
24
|
+
- Switched reversed attr defs warning to `info` logging level.
|
25
|
+
- `Eco::API::Common::DefaultParsers::SelectParser`
|
26
|
+
- When there is dependency with the hash of options, it should return nil when the option is unknown.
|
27
|
+
|
28
|
+
### Fixed
|
29
|
+
- Tidied up file encoding when getting content.
|
30
|
+
- This fixes `Eco::CSV::read`
|
31
|
+
- `Eco::API::Common::People::DefaultParsers::CSVParser` made some refactor.
|
32
|
+
|
33
|
+
## [2.4.9] - 2023-04-17
|
34
|
+
|
35
|
+
### Added
|
36
|
+
- `Eco::API::UseCases#source_object` to retrieve the original use case definition object
|
37
|
+
- This allows the `Eco::API::UseCases::UseCase` object to access the object that defined the usecase and initialize `@session`.
|
38
|
+
- It now can know what `type` of use case created the `@callback`
|
39
|
+
- Next steps with this may be play a bit with the `aritity` of the `@callback` block, allow parsers to skip the serializer definition (so the default one runs), etc.
|
40
|
+
- `Eco::API::Common::Loaders::Base` the above feature allowed to initialize the `@options`, and therefore...
|
41
|
+
- `#options` method **added** (based on `@options` instance var)
|
42
|
+
|
43
|
+
### Changed
|
44
|
+
- `Eco::API::Common::Loaders::Base`
|
45
|
+
- `#session` method is based on `@session` instance var, which allows to override without having to redefine `session` (`attr_reader :session` is no longer necessary)
|
46
|
+
- Softened max version of **gem** dependencies
|
47
|
+
- Upgraded self-managed **gem** dependencies
|
48
|
+
|
49
|
+
### Fixed
|
50
|
+
- `Eco::API::Common::ClassAutoLoader::autoload_children`
|
51
|
+
- Skip `singleton_classes`
|
52
|
+
|
10
53
|
## [2.4.8] - 2023-04-03
|
11
54
|
|
12
55
|
### Added
|
data/eco-helpers.gemspec
CHANGED
@@ -24,24 +24,24 @@ Gem::Specification.new do |spec|
|
|
24
24
|
#spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
25
25
|
spec.require_paths = ["lib"]
|
26
26
|
|
27
|
-
spec.add_development_dependency "bundler", ">= 2.4.8", "<
|
28
|
-
spec.add_development_dependency "rspec", ">= 3.10.0", "<
|
29
|
-
spec.add_development_dependency "rake", ">= 13.0.3", "<
|
30
|
-
spec.add_development_dependency "yard", ">= 0.9.26", "<
|
31
|
-
spec.add_development_dependency "redcarpet", ">= 3.5.1", "<
|
27
|
+
spec.add_development_dependency "bundler", ">= 2.4.8", "< 3"
|
28
|
+
spec.add_development_dependency "rspec", ">= 3.10.0", "< 4"
|
29
|
+
spec.add_development_dependency "rake", ">= 13.0.3", "< 14"
|
30
|
+
spec.add_development_dependency "yard", ">= 0.9.26", "< 1"
|
31
|
+
spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 4"
|
32
32
|
|
33
|
-
spec.add_dependency 'ecoportal-api', '>= 0.9.
|
34
|
-
spec.add_dependency 'ecoportal-api-v2', '>= 1.1.
|
35
|
-
spec.add_dependency 'ecoportal-api-graphql', '>= 0.3.
|
33
|
+
spec.add_dependency 'ecoportal-api', '>= 0.9.4', '< 0.10'
|
34
|
+
spec.add_dependency 'ecoportal-api-v2', '>= 1.1.2', '< 1.2'
|
35
|
+
spec.add_dependency 'ecoportal-api-graphql', '>= 0.3.7', '< 0.4'
|
36
36
|
spec.add_dependency 'aws-sdk-s3', '>= 1.83.0', '< 2'
|
37
37
|
spec.add_dependency 'aws-sdk-ses', '>= 1.36.0', '< 2'
|
38
|
-
spec.add_dependency 'dotenv', '>= 2.7.6',
|
39
|
-
spec.add_dependency 'net-sftp', '>= 3.0.0',
|
40
|
-
spec.add_dependency 'hashdiff', '>= 1.0.1',
|
41
|
-
spec.add_dependency 'fuzzy_match', '>= 2.1.0',
|
42
|
-
spec.add_dependency 'amatch', '>= 0.4.0',
|
43
|
-
spec.add_dependency 'jaro_winkler', '>= 1.5.4',
|
44
|
-
spec.add_dependency 'roo', '>= 2.8.3',
|
45
|
-
spec.add_dependency 'roo-xls', '>= 1.2.0',
|
46
|
-
spec.add_dependency 'docx', '>= 0.6.2',
|
38
|
+
spec.add_dependency 'dotenv', '>= 2.7.6', '< 3'
|
39
|
+
spec.add_dependency 'net-sftp', '>= 3.0.0', '< 4'
|
40
|
+
spec.add_dependency 'hashdiff', '>= 1.0.1', '< 1.1'
|
41
|
+
spec.add_dependency 'fuzzy_match', '>= 2.1.0', '< 2.2'
|
42
|
+
spec.add_dependency 'amatch', '>= 0.4.0', '< 0.5'
|
43
|
+
spec.add_dependency 'jaro_winkler', '>= 1.5.4', '< 1.6'
|
44
|
+
spec.add_dependency 'roo', '>= 2.8.3', '< 2.9'
|
45
|
+
spec.add_dependency 'roo-xls', '>= 1.2.0', '< 1.3'
|
46
|
+
spec.add_dependency 'docx', '>= 0.6.2', '< 0.7'
|
47
47
|
end
|
@@ -80,8 +80,14 @@ module Eco
|
|
80
80
|
return false if pending_children.empty?
|
81
81
|
@loading_children = true
|
82
82
|
pending_children.each do |klass|
|
83
|
-
|
84
|
-
|
83
|
+
begin
|
84
|
+
@child = klass.new(object)
|
85
|
+
rescue TypeError => e
|
86
|
+
# Can't create from this class (must be the singleton class)
|
87
|
+
# Just ignore
|
88
|
+
ensure
|
89
|
+
autoloaded_children.push(klass)
|
90
|
+
end
|
85
91
|
end
|
86
92
|
@loading_children = false
|
87
93
|
true
|
@@ -102,7 +108,6 @@ module Eco
|
|
102
108
|
def new_classes
|
103
109
|
ObjectSpace.each_object(::Class).to_a - known_classes
|
104
110
|
end
|
105
|
-
|
106
111
|
end
|
107
112
|
end
|
108
113
|
end
|
@@ -3,7 +3,6 @@ module Eco
|
|
3
3
|
module Common
|
4
4
|
module Loaders
|
5
5
|
class CaseBase < Loaders::Base
|
6
|
-
|
7
6
|
class << self
|
8
7
|
attr_writer :name, :type
|
9
8
|
|
@@ -19,13 +18,13 @@ module Eco
|
|
19
18
|
def name_only_once!
|
20
19
|
raise "You have already declared #{self} or you are trying to give it a name twice" if @name
|
21
20
|
end
|
22
|
-
|
23
21
|
end
|
24
22
|
|
23
|
+
attr_reader :usecase
|
24
|
+
|
25
25
|
def name
|
26
26
|
self.class.name
|
27
27
|
end
|
28
|
-
|
29
28
|
end
|
30
29
|
end
|
31
30
|
end
|
@@ -3,7 +3,8 @@ class Eco::API::Common::People::DefaultParsers::CSVParser < Eco::API::Common::Lo
|
|
3
3
|
|
4
4
|
def parser(data, deps)
|
5
5
|
Eco::CSV.parse(data, headers: true, skip_blanks: true).tap do |table|
|
6
|
-
|
6
|
+
require_headers!(table)
|
7
|
+
check_headers(table) if deps[:check_headers] && check_headers?
|
7
8
|
end.each_with_object([]) do |row, arr_hash|
|
8
9
|
row_hash = row.headers.uniq.each_with_object({}) do |attr, hash|
|
9
10
|
next if attr.to_s.strip.empty?
|
@@ -26,6 +27,26 @@ class Eco::API::Common::People::DefaultParsers::CSVParser < Eco::API::Common::Lo
|
|
26
27
|
|
27
28
|
private
|
28
29
|
|
30
|
+
def abort(message)
|
31
|
+
logger.error(message)
|
32
|
+
exit(1)
|
33
|
+
end
|
34
|
+
|
35
|
+
def require_headers!(table)
|
36
|
+
headers = table.headers
|
37
|
+
abort("Missing headers in CSV") unless headers && !headers.empty?
|
38
|
+
empty = []
|
39
|
+
with_value = headers.each_with_index do |header, idx|
|
40
|
+
empty << idx if header.to_s.strip.empty?
|
41
|
+
end
|
42
|
+
abort("Empty headers in column(s): #{empty.join(', ')}") unless empty.empty?
|
43
|
+
true
|
44
|
+
end
|
45
|
+
|
46
|
+
def check_headers?
|
47
|
+
!options.dig(:input, :header_check, :skip)
|
48
|
+
end
|
49
|
+
|
29
50
|
def options
|
30
51
|
ASSETS.cli.options
|
31
52
|
end
|
@@ -43,29 +64,54 @@ class Eco::API::Common::People::DefaultParsers::CSVParser < Eco::API::Common::Lo
|
|
43
64
|
end
|
44
65
|
|
45
66
|
def check_headers(table)
|
46
|
-
headers
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
67
|
+
headers = table.headers
|
68
|
+
unmatch = []
|
69
|
+
unmatch = unmatched_headers(headers) if options.dig(:input, :header_check, :order)
|
70
|
+
missing = missing_headers(headers)
|
71
|
+
unknown = unknown_headers(headers)
|
72
|
+
criteria = [unknown, missing[:direct], missing[:indirect], unmatch]
|
73
|
+
return if criteria.all?(&:empty?)
|
74
|
+
|
75
|
+
msg = "Detected possible HEADER ISSUES !!!\n"
|
76
|
+
|
77
|
+
# requires exact match
|
78
|
+
unless unmatch.empty?
|
79
|
+
msg << "CSV headers do NOT exactly match the expected:\n"
|
80
|
+
msg << " * Expected: #{known_headers}\n"
|
81
|
+
expected, given = unmatch.first
|
82
|
+
msg << " * First unmatch => Given: '#{given}' where expected '#{expected}'\n"
|
83
|
+
missed = known_headers - headers
|
84
|
+
unless missed.empty?
|
85
|
+
msg << " * Missing headers:\n"
|
86
|
+
msg << " - #{missed.join("\n - ")}\n"
|
66
87
|
end
|
67
|
-
|
68
|
-
|
88
|
+
end
|
89
|
+
msg << "Missing or Wrong HEADER names in the CSV file:\n"
|
90
|
+
msg << " * UNKNOWN (or not used?): #{unknown}\n" unless unknown.empty?
|
91
|
+
msg << " * MISSING HEADER: #{missing[:direct]}\n" unless missing[:direct].empty?
|
92
|
+
unless (data = missing[:indirect]).empty?
|
93
|
+
msg << " * MISSING INDIRECTLY:\n"
|
94
|
+
data.each do |ext, info|
|
95
|
+
msg << " - '#{ext}' => "
|
96
|
+
msg << (info[:attrs] || {}).map do |status, attrs|
|
97
|
+
if status == :inactive
|
98
|
+
"makes inactive: #{attrs}"
|
99
|
+
elsif status == :active
|
100
|
+
"there could be missing info in: #{attrs}"
|
101
|
+
end
|
102
|
+
end.compact.join("; ") + "\n"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
logger.warn(msg)
|
106
|
+
if options.dig(:input, :header_check, :must_be_valid)
|
107
|
+
abort("There were issues identified on the CSV header names. Aborting...")
|
108
|
+
end
|
109
|
+
sleep(2)
|
110
|
+
end
|
111
|
+
|
112
|
+
def unmatched_headers(headers)
|
113
|
+
known_headers.zip(headers).reject do |(expected, given)|
|
114
|
+
expected == given
|
69
115
|
end
|
70
116
|
end
|
71
117
|
|
@@ -82,27 +128,28 @@ class Eco::API::Common::People::DefaultParsers::CSVParser < Eco::API::Common::Lo
|
|
82
128
|
ext_present = known_headers_present(int_head) | ext
|
83
129
|
ext_miss = known_headers - ext_present
|
84
130
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
131
|
+
{
|
132
|
+
direct: [],
|
133
|
+
indirect: {}
|
134
|
+
}.tap do |missing|
|
135
|
+
ext_miss.each do |ext|
|
136
|
+
next unless int = fields_mapper.to_internal(ext)
|
137
|
+
missing[:direct] << ext if all_internal_attrs.include?(int)
|
138
|
+
related_attrs_requirements = required_attrs.values.select do |req|
|
139
|
+
dep = req.dependant?(int)
|
140
|
+
affects = dep && !int_head.include?(int)
|
141
|
+
in_header = int_head.include?(req.attr)
|
142
|
+
affects || (dep && !in_header)
|
143
|
+
end
|
144
|
+
next if related_attrs_requirements.empty?
|
145
|
+
data = missing[:indirect][ext] = {}
|
146
|
+
data[:int] = int
|
147
|
+
data[:attrs] = {}
|
148
|
+
related_attrs_requirements.each_with_object(data[:attrs]) do |req, attrs|
|
149
|
+
status = req.active?(*int_head) ? :active : :inactive
|
150
|
+
attrs[status] ||= []
|
151
|
+
attrs[status] << req.attr
|
152
|
+
end
|
106
153
|
end
|
107
154
|
end
|
108
155
|
end
|
@@ -114,8 +161,11 @@ class Eco::API::Common::People::DefaultParsers::CSVParser < Eco::API::Common::Lo
|
|
114
161
|
end
|
115
162
|
end
|
116
163
|
|
164
|
+
# Scopes what internal attrs appear in headers as they are
|
117
165
|
def internal_present_or_active(headers, inactive_requirements = {})
|
118
|
-
|
166
|
+
# internal attrs that are not being mapped
|
167
|
+
int_all = all_internal_attrs.reject {|i| fields_mapper.external?(i)}
|
168
|
+
hint = headers & int_all
|
119
169
|
hext = headers - hint
|
120
170
|
int_present = hint + hext.map {|e| fields_mapper.to_internal(e)}.compact
|
121
171
|
|
@@ -142,8 +192,9 @@ class Eco::API::Common::People::DefaultParsers::CSVParser < Eco::API::Common::Lo
|
|
142
192
|
int_present
|
143
193
|
end
|
144
194
|
|
195
|
+
# The csv header names as expected
|
145
196
|
def known_headers
|
146
|
-
@known_headers ||= fields_mapper.list(:external).compact
|
197
|
+
@known_headers ||= fields_mapper.list(:external).compact.uniq
|
147
198
|
end
|
148
199
|
|
149
200
|
def fields_mapper
|
@@ -167,5 +218,4 @@ class Eco::API::Common::People::DefaultParsers::CSVParser < Eco::API::Common::Lo
|
|
167
218
|
def person_parser
|
168
219
|
session.entry_factory.person_parser
|
169
220
|
end
|
170
|
-
|
171
221
|
end
|
@@ -11,9 +11,9 @@ module Eco
|
|
11
11
|
options_hash = deps[:select_hashes][deps["attr"]]
|
12
12
|
next value if !options_hash
|
13
13
|
if value.is_a?(Array)
|
14
|
-
value.map { |v| options_hash[v&.downcase.strip]
|
14
|
+
value.map { |v| options_hash[v&.downcase.strip] }.compact
|
15
15
|
elsif value
|
16
|
-
options_hash[value&.downcase.strip]
|
16
|
+
options_hash[value&.downcase.strip]
|
17
17
|
end
|
18
18
|
end.def_serializer do |value|
|
19
19
|
value
|
@@ -86,10 +86,10 @@ module Eco
|
|
86
86
|
# @option options [Boolean] :check_headers signals if the `csv` file headers should be expected.
|
87
87
|
# @return [Eco::API::Common::People::Entries] collection of `Eco::API::Common::People::PersonEntry`.
|
88
88
|
def entries(data: (no_data = true; nil), file: (no_file = true; nil), format: (no_format = true; nil), **options)
|
89
|
-
fatal("You should at least use data: or file:, but not both")
|
89
|
+
fatal("You should at least use data: or file:, but not both") if no_data == no_file
|
90
90
|
fatal("You must specify a valid format: (symbol) when you use file.") if file && no_format
|
91
|
-
fatal("Format should be a Symbol. Given '#{format}'")
|
92
|
-
fatal("There is no parser/serializer for format ':#{format.to_s}'")
|
91
|
+
fatal("Format should be a Symbol. Given '#{format}'") if format && !format.is_a?(Symbol)
|
92
|
+
fatal("There is no parser/serializer for format ':#{format.to_s}'") unless no_format || @person_parser.defined?(format)
|
93
93
|
|
94
94
|
options.merge!(content: data) unless no_data
|
95
95
|
options.merge!(file: file) unless no_file
|
@@ -113,9 +113,8 @@ module Eco
|
|
113
113
|
# Get content only when it's not :xls
|
114
114
|
# note: even if content was provided, file takes precedence
|
115
115
|
if (format != :xls) && file
|
116
|
-
content = get_file_content(file, encoding)
|
116
|
+
content = get_file_content(file, encoding: encoding)
|
117
117
|
end
|
118
|
-
#content = get_file_content(file, format, encoding) if (format != :xls) && file
|
119
118
|
|
120
119
|
case content
|
121
120
|
when Hash
|
@@ -129,15 +128,16 @@ module Eco
|
|
129
128
|
case sample
|
130
129
|
when Hash, Array, ::CSV::Row
|
131
130
|
Eco::CSV::Table.new(content).to_array_of_hashes
|
131
|
+
when NilClass
|
132
|
+
abort("There is NO input data")
|
132
133
|
else
|
133
|
-
|
134
|
+
abort("Input content 'Array' of '#{sample.class}' is not supported.")
|
134
135
|
end
|
135
136
|
else
|
136
137
|
if file && format == :xls
|
137
138
|
person_parser.parse(format, file)
|
138
139
|
else
|
139
|
-
|
140
|
-
exit(1)
|
140
|
+
abort("Could not obtain any data out of these: #{kargs}. Given content: '#{content.class}'")
|
141
141
|
end
|
142
142
|
end.tap do |out_array|
|
143
143
|
start_from_two = (format == :csv) || format == :xls
|
@@ -189,6 +189,11 @@ module Eco
|
|
189
189
|
|
190
190
|
private
|
191
191
|
|
192
|
+
def abort(message)
|
193
|
+
logger.error(message)
|
194
|
+
exit(1)
|
195
|
+
end
|
196
|
+
|
192
197
|
def fatal(msg)
|
193
198
|
logger.fatal(msg)
|
194
199
|
raise msg
|
@@ -11,7 +11,7 @@ module Eco
|
|
11
11
|
# @return [RequiredAttrs]
|
12
12
|
def required_attrs
|
13
13
|
@required_attrs ||= @dependencies[:required_attrs]
|
14
|
-
#@required_attrs ||= RequiredAttrs.new(attr, :
|
14
|
+
#@required_attrs ||= RequiredAttrs.new(attr, :unknown, [attr])
|
15
15
|
end
|
16
16
|
|
17
17
|
# @see Eco::Language::Models::ParserSerializer#def_parser
|
@@ -133,7 +133,7 @@ module Eco
|
|
133
133
|
attr = @attr_map.to_internal(value.strip)
|
134
134
|
when @attr_map.internal?(value) || @attr_map.internal?(value.strip) || @attr_map.internal?(value.strip.downcase)
|
135
135
|
unless cached_warning("external", "reversed", value)
|
136
|
-
logger.
|
136
|
+
logger.info("The mapper [external, internal] attribute names may be declared reversedly for EXTERNAL attribute: '#{value}'")
|
137
137
|
end
|
138
138
|
end
|
139
139
|
end
|
@@ -172,7 +172,7 @@ module Eco
|
|
172
172
|
attr = @attr_map.to_external(value.strip)
|
173
173
|
when @attr_map.external?(value) || @attr_map.external?(value.strip) || @attr_map.external?(value.strip.downcase)
|
174
174
|
unless cached_warning("internal", "reversed", value)
|
175
|
-
logger.
|
175
|
+
logger.info("The mapper [external, internal] attribute names may be declared reversedly for INTERNAL attribute: '#{value}'")
|
176
176
|
end
|
177
177
|
end
|
178
178
|
end
|
@@ -174,7 +174,7 @@ module Eco
|
|
174
174
|
|
175
175
|
# Helper to define and associate a parser/serializer to a type or attribute.
|
176
176
|
# @raise [Exception] if trying to define a parser/serializer for:
|
177
|
-
# - an
|
177
|
+
# - an unknown attribute (`String`)
|
178
178
|
# - an unrecognized type or format (`Symbol`)
|
179
179
|
# @param attr [String] type (`Symbol`) or attribute (`String`) to define the parser/serializer to.
|
180
180
|
# @param dependencies [Hash] dependencies to be used when calling the parser/serializer.
|
@@ -12,7 +12,7 @@ module Eco
|
|
12
12
|
alias_method :fm, :file_manager
|
13
13
|
|
14
14
|
include Session::Helpers
|
15
|
-
|
15
|
+
|
16
16
|
def initialize(e)
|
17
17
|
raise "Expected object Eco::API::Common::Session::Environment. Given: #{e.class}" unless e.is_a?(Environment)
|
18
18
|
self.environment = e
|
@@ -72,7 +72,6 @@ module Eco
|
|
72
72
|
logger.fatal(msg)
|
73
73
|
raise msg
|
74
74
|
end
|
75
|
-
|
76
75
|
end
|
77
76
|
end
|
78
77
|
end
|
@@ -24,9 +24,8 @@ module Eco
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def mailer
|
27
|
-
|
28
|
-
|
29
|
-
end
|
27
|
+
return nil unless mailer?
|
28
|
+
@mailer ||= Eco::API::Common::Session::Mailer.new(enviro: self)
|
30
29
|
end
|
31
30
|
|
32
31
|
def mailer?
|
@@ -34,9 +33,8 @@ module Eco
|
|
34
33
|
end
|
35
34
|
|
36
35
|
def sftp
|
37
|
-
|
38
|
-
|
39
|
-
end
|
36
|
+
return nil unless sftp?
|
37
|
+
@sftp ||= Eco::API::Common::Session::SFTP.new(enviro: self)
|
40
38
|
end
|
41
39
|
|
42
40
|
def sftp?
|
@@ -44,9 +42,8 @@ module Eco
|
|
44
42
|
end
|
45
43
|
|
46
44
|
def s3uploader
|
47
|
-
|
48
|
-
|
49
|
-
end
|
45
|
+
return nil unless s3uploader?
|
46
|
+
@s3uploader ||= Eco::API::Common::Session::S3Uploader.new(enviro: self)
|
50
47
|
end
|
51
48
|
|
52
49
|
def s3uploader?
|
@@ -56,7 +53,6 @@ module Eco
|
|
56
53
|
def api(version: nil)
|
57
54
|
config.api(logger, version: version)
|
58
55
|
end
|
59
|
-
|
60
56
|
end
|
61
57
|
end
|
62
58
|
end
|
@@ -1,31 +1,31 @@
|
|
1
|
-
require 'timeout'
|
2
1
|
module Eco
|
3
2
|
module API
|
4
3
|
module Common
|
5
4
|
module Session
|
6
5
|
module Helpers
|
7
6
|
module PromptUser
|
8
|
-
|
7
|
+
# Prompts user for input with option for default on timeout.
|
9
8
|
def prompt_user(question, default:, explanation: "", timeout: nil)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
9
|
+
require 'timeout'
|
10
|
+
response = \
|
11
|
+
if config.run_mode_remote?
|
12
|
+
default
|
13
|
+
else
|
14
|
+
puts explanation
|
15
|
+
print "#{question} "
|
16
|
+
if timeout
|
17
|
+
begin
|
18
|
+
Timeout::timeout(timeout) { STDIN.gets.chop }
|
19
|
+
rescue Timeout::Error
|
20
|
+
default
|
21
|
+
end
|
22
|
+
else
|
23
|
+
STDIN.gets.chop
|
24
|
+
end
|
25
|
+
end
|
25
26
|
return response unless block_given?
|
26
27
|
yield(response)
|
27
28
|
end
|
28
|
-
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'aws-sdk-ses'
|
2
|
-
|
3
1
|
module Eco
|
4
2
|
module API
|
5
3
|
module Common
|
@@ -42,6 +40,7 @@ module Eco
|
|
42
40
|
private
|
43
41
|
|
44
42
|
def ses
|
43
|
+
require 'aws-sdk-ses'
|
45
44
|
begin
|
46
45
|
@ses ||= Aws::SES::Client.new(
|
47
46
|
access_key_id: fetch_access_key_id,
|
@@ -98,7 +97,6 @@ module Eco
|
|
98
97
|
def fetch_message_id_domain
|
99
98
|
config.mailer.message_id_domain
|
100
99
|
end
|
101
|
-
|
102
100
|
end
|
103
101
|
end
|
104
102
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'aws-sdk-s3'
|
2
|
-
|
3
1
|
module Eco
|
4
2
|
module API
|
5
3
|
module Common
|
@@ -75,6 +73,7 @@ module Eco
|
|
75
73
|
end
|
76
74
|
|
77
75
|
def bucket
|
76
|
+
require 'aws-sdk-s3'
|
78
77
|
begin
|
79
78
|
@bucket ||= Aws::S3::Resource.new(
|
80
79
|
access_key_id: fetch_access_key_id,
|
@@ -128,7 +127,6 @@ module Eco
|
|
128
127
|
def fetch_region
|
129
128
|
config.s3storage.region || ENV['AWS_REGION']
|
130
129
|
end
|
131
|
-
|
132
130
|
end
|
133
131
|
end
|
134
132
|
end
|