eco-helpers 2.0.3 → 2.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44dd3a1b4d94cef2da5fc8c4618c6898bf0310f48778be120cd83503913af297
4
- data.tar.gz: 128f7c6d4a4112636089c82ec61a127914263553af0fe4d54aad563d73088532
3
+ metadata.gz: 507156a88f88bc8227f255251d1f8861f486a23a0fe3b23e003706dfe708507b
4
+ data.tar.gz: '07952da6db5134dfecc5461d41ad4ce0e264c0eaaec3d9ec55d9d42b41b2620b'
5
5
  SHA512:
6
- metadata.gz: d14f77e2cf74584eafc8c9834a71d52d1e399767352d27167ef5cbf05266c2a77777f866e64c482e610c8ca2a600aea3640256ed16ee1c6855a6b2db30af2c76
7
- data.tar.gz: 1db0afa72df07479f22eca03553b3ac3c51f0228a7d726422a2f6e313565c960554be778c8b36515f1b14dc1085d8378d5d1ec859e96ef26cd116b36ccc738cf
6
+ metadata.gz: fcfa79dfa92123af03399391797013e7a23a032504570d8cc2cfcb890f8a93ece62a7acbbd43b2fbd70a4de20c28baa60635536d9b431ac260de2905db825332
7
+ data.tar.gz: 0e63f504d100e5647e9b48eceeebda57814d1dda0ce3d8c0147cb58ce7c40bf5e1225bc261d207d531af22611dc4fd0461461f70016647cda0eaf1147e653c12
data/CHANGELOG.md CHANGED
@@ -1,6 +1,45 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [2.0.8] - 2021-03-xx
5
+
6
+ ### Added
7
+ ### Changed
8
+ ### Fixed
9
+ - `Ecoportal::API::External::Person#identity` adjust behaviour
10
+
11
+ ## [2.0.7] - 2021-03-09
12
+
13
+ ### Added
14
+ ### Changed
15
+ ### Fixed
16
+ - `Eco::API::Session::Batch::JobsGroups` and `Eco::API::Session::Batch::Jobs`: when new `Batch::Job`s are creating during launch, they remained unlaunched
17
+ - this fix makes `#launch` method to iterate until there are no pending
18
+
19
+ ## [2.0.6] - 2021-03-08
20
+
21
+ ### Added
22
+ ### Changed
23
+ - `Eco::API::Session::Batch:Errors` moved some methods to be private
24
+ ### Fixed
25
+ - `Eco::API::Error` should inherit from `StandardError`, rather than from `Exception`
26
+
27
+ ## [2.0.5] - 2021-02-24
28
+
29
+ ### Added
30
+ ### Changed
31
+ ### Fixed
32
+ - `Eco::API::Common::People::PersonParser#symbol_keys` to use `Array#select`
33
+ - as `Array#filter` was introduced in ruby `2.5.5`
34
+
35
+ ## [2.0.4] - 2021-02-23
36
+
37
+ ### Added
38
+ ### Changed
39
+ - `Eco::API::Common::People::PersonParser#defined_attrs` to include virtual attributes
40
+
41
+ ### Fixed
42
+
4
43
  ## [2.0.3] - 2021-02-23
5
44
 
6
45
  ### Added
data/eco-helpers.gemspec CHANGED
@@ -30,9 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "yard", ">= 0.9.26", "< 0.10"
31
31
  spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 3.6"
32
32
 
33
- spec.add_dependency 'ecoportal-api', '>= 0.8.1', '< 0.9'
34
- #spec.add_dependency 'ecoportal-api', '>= 0.7.5', '< 0.8'
35
- spec.add_dependency 'ecoportal-api-v2', '>= 0.8.3', '< 0.9'
33
+ spec.add_dependency 'ecoportal-api', '>= 0.8.2', '< 0.9'
34
+ spec.add_dependency 'ecoportal-api-v2', '>= 0.8.6', '< 0.9'
36
35
  spec.add_dependency 'aws-sdk-s3', '>= 1.83.0', '< 2'
37
36
  spec.add_dependency 'aws-sdk-ses', '>= 1.36.0', '< 2'
38
37
  spec.add_dependency 'dotenv', '>= 2.7.6', '< 2.8'
@@ -154,14 +154,20 @@ module Eco
154
154
  final_entry["default_tag"]
155
155
  end
156
156
 
157
- # Provides a reference of this person.
157
+ # Provides a reference to this person entry.
158
+ # @return [String] string summary of this person identity.
159
+ def identify
160
+ str_id = id ? "id: '#{id}'; " : ""
161
+ "(row: #{idx}) '#{name}' (#{str_id}ext_id: '#{external_id}'; email: '#{email}')"
162
+ end
163
+
164
+ # Provides a reference of this person entry.
158
165
  # @return [String] string summary of this person identity.
159
166
  def to_s(options)
160
167
  options = into_a(options)
161
168
  case
162
169
  when options.include?(:identify)
163
- str_id = id ? "id: '#{id}'; " : ""
164
- "(row: #{idx}) '#{name}' (#{str_id}ext_id: '#{external_id}'; email: '#{email}')"
170
+ identify
165
171
  else
166
172
  final_entry.each.map do |k, v|
167
173
  "'#{k}': '#{v.to_json}'"
@@ -99,9 +99,16 @@ module Eco
99
99
  # - the list is sorted according `CORE_ATTRS` + `ACCOUNT_ATTRS` + schema attrs
100
100
  # @return [Array<String>] list of all attribute defined parsers.
101
101
  def defined_attrs
102
- defined = @parsers.keys
103
- defined = (all_attrs || defined) && defined
104
- defined - (defined - all_attrs)
102
+ defined = @parsers.keys
103
+ defined = (all_attrs | defined) & defined
104
+ defined - symbol_keys
105
+ end
106
+
107
+ # Symbol keys are type or import parsers (that do not belong to the model)
108
+ # @note this was introduced to boost virtual fields to treat in different phases of the parsing process
109
+ # @return [Array<Symbol>] all the parsers defined as Symbol
110
+ def symbol_keys
111
+ @parsers.keys.select {|k| k.is_a?(Symbol)}
105
112
  end
106
113
 
107
114
  # Returns a list of all the internal attributes of the model that have a parser defined & that should be active.
@@ -13,8 +13,8 @@ module Ecoportal
13
13
  original_doc["details"] = JSON.parse(doc["details"])
14
14
  end
15
15
 
16
- def identify
17
- if entry
16
+ def identify(section = :person)
17
+ if entry && section == :entry
18
18
  entry.to_s(:identify)
19
19
  else
20
20
  str_id = id ? "id: '#{id}'; " : ""
data/lib/eco/api/error.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Eco
2
2
  module API
3
3
  # To identify api server errors
4
- class Error < Exception
5
- class UnknownErrorClass < Exception
4
+ class Error < StandardError
5
+ class UnknownErrorClass < StandardError
6
6
  def initialize(msg = nil, klass:)
7
7
  msg ||= "Unkown api error class #{klass}"
8
8
  super(msg)
@@ -8,6 +8,8 @@ module Eco
8
8
  # @attr_reader status [Eco::API::Session::Batch::Status] `batch status` this `Errors` object is associated to.
9
9
  attr_reader :status
10
10
 
11
+ ErrorCache = Struct.new(:type, :err, :entry)
12
+
11
13
  # @param status [Eco::API::Session::Batch::Status] `batch status` this `Errors` object is associated to.
12
14
  def initialize(status:)
13
15
  "Expected Batch::Status as root. Given: #{status.class}" unless status.is_a?(Eco::API::Session::Batch::Status)
@@ -55,29 +57,6 @@ module Eco
55
57
  entries.length
56
58
  end
57
59
 
58
- # Input entries that got **error** response from the _Server_.
59
- # @raise [Exception] if there are elements of the final `queue` that did not get response
60
- # @note discards those that did not get _response_ from the Server (so those that were not queried)
61
- # - please, observe that this can only happen if there were repeated entries in the `source_queue`
62
- # @return [Array<Hash>, Array<Ecoportal::API::V1::Person>, Array<Ecoportal::API::Internal::Person>]
63
- def entries
64
- queue.each_with_index.map do |query, i|
65
- unless response = status[i]
66
- msg = "Error: query with no response. You might have duplicated entries in your queue.\n"
67
- msg += "Queue length: #{queue.length}; Queue elements class: #{queue.first.class}\n"
68
- msg += "Query with no response. Person: #{person_ref(query)}\n"
69
- queue.map do |entry|
70
- if [:id, :external_id, :email].any? {|attr| (v = get_attr(entry, attr)) && v == get_attr(query, attr)}
71
- msg += "It could be this peson entry (idx: #{to_index(entry)}): #{person_ref(entry)}\n"
72
- end
73
- end
74
- raise msg
75
- end
76
-
77
- response.success?? nil : query
78
- end.compact
79
- end
80
-
81
60
  # For all the `entries` with errors generates a `Hash` object
82
61
  # @return [Array<Hash>] where each `Hash` has
83
62
  # 1. `:type` -> the error type
@@ -88,11 +67,11 @@ module Eco
88
67
  if body = status[entry].body
89
68
  if errs = body["errors"]
90
69
  errs.each do |msg|
91
- arr.push({
92
- type: klass = Eco::API::Error.get_type(msg),
93
- err: klass.new(err_msg: msg, entry: entry, session: session),
94
- entry: entry
95
- })
70
+ arr.push(ErrorCache.new(
71
+ klass = Eco::API::Error.get_type(msg),
72
+ klass.new(err_msg: msg, entry: entry, session: session),
73
+ entry
74
+ ))
96
75
  end
97
76
  end
98
77
  end
@@ -103,45 +82,16 @@ module Eco
103
82
  # @return [Hash] where each `key` is a `type` **error** and each value is
104
83
  # an `Array` of `entries` that got that error
105
84
  def by_type
106
- errors.group_by do |h|
107
- h[:type]
85
+ errors.group_by do |e|
86
+ e.type
108
87
  end.transform_values do |arr|
109
- arr.map {|h| h[:entry]}
88
+ arr.map {|e| e.entry}
110
89
  end
111
90
  end
112
91
  # @!endgroup
113
92
 
114
93
  # @!group Messaging methods
115
94
 
116
- # Generates a `String` specifying the error for the entry `key`.
117
- # @param key [Integer, Ecoportal::API::V1::Person]
118
- # @return [String] the error description.
119
- def str(key)
120
- msg = ""
121
- unless status.success?(key)
122
- i = to_index(key)
123
- entry = queue.to_a[i]
124
- response = status[i]
125
- msg = "Error #{response.status}: #{response.body}\n"
126
- msg += "-- Failed to batch #{method}. Person: #{person_ref(entry)}"
127
- end
128
- msg
129
- end
130
-
131
- # Sorts the entries that got server error by error `type` and generates the error messages.
132
- # @return [Array<String>] the errors messages.
133
- def strs
134
- by_type.values.flatten(1).each_with_object([]) do |query, msgs|
135
- msgs.push(str(query))
136
- end
137
- end
138
-
139
- def print_one(key)
140
- unless status.success?(key)
141
- logger.error(str(key))
142
- end
143
- end
144
-
145
95
  def message
146
96
  msgs = strs
147
97
  if msgs.length > 0
@@ -163,6 +113,29 @@ module Eco
163
113
 
164
114
  private
165
115
 
116
+ # Input entries that got **error** response from the _Server_.
117
+ # @raise [Exception] if there are elements of the final `queue` that did not get response
118
+ # @note discards those that did not get _response_ from the Server (so those that were not queried)
119
+ # - please, observe that this can only happen if there were repeated entries in the `source_queue`
120
+ # @return [Array<Hash>, Array<Ecoportal::API::V1::Person>, Array<Ecoportal::API::Internal::Person>]
121
+ def entries
122
+ queue.filter.with_index do |query, i|
123
+ unless response = status[i]
124
+ msg = "Error: query with no response. You might have duplicated entries in your queue.\n"
125
+ msg += "Queue length: #{queue.length}; Queue elements class: #{queue.first.class}\n"
126
+ msg += "Query with no response. Person: #{person_ref(query)}\n"
127
+ queue.map do |entry|
128
+ if [:id, :external_id, :email].any? {|attr| (v = get_attr(entry, attr)) && v == get_attr(query, attr)}
129
+ msg += "It could be this peson entry (idx: #{to_index(entry)}): #{person_ref(entry)}\n"
130
+ end
131
+ end
132
+ raise msg
133
+ end
134
+
135
+ !response.success?
136
+ end
137
+ end
138
+
166
139
  def person_ref(entry)
167
140
  row_str = (row = get_row(entry)) ? "(row: #{row}) " : nil
168
141
  "#{row_str}(id: '#{get_attr(entry, :id)}') '#{get_attr(entry, :name)}' ('#{get_attr(entry, :external_id)}': '#{get_attr(entry, :email)}')"
@@ -185,6 +158,35 @@ module Eco
185
158
  end
186
159
  end
187
160
 
161
+ # Sorts the entries that got server error by error `type` and generates the error messages.
162
+ # @return [Array<String>] the errors messages.
163
+ def strs
164
+ by_type.values.flatten(1).each_with_object([]) do |query, msgs|
165
+ msgs.push(str(query))
166
+ end
167
+ end
168
+
169
+ # Generates a `String` specifying the error for the entry `key`.
170
+ # @param key [Integer, Ecoportal::API::V1::Person]
171
+ # @return [String] the error description.
172
+ def str(key)
173
+ msg = ""
174
+ unless status.success?(key)
175
+ i = to_index(key)
176
+ entry = queue.to_a[i]
177
+ response = status[i]
178
+ msg = "Error #{response.status}: #{response.body}\n"
179
+ msg += "-- Failed to batch #{method}. Person: #{person_ref(entry)}"
180
+ end
181
+ msg
182
+ end
183
+
184
+ def print_one(key)
185
+ unless status.success?(key)
186
+ logger.error(str(key))
187
+ end
188
+ end
189
+
188
190
  end
189
191
  end
190
192
  end
@@ -212,6 +212,13 @@ module Eco
212
212
 
213
213
  private
214
214
 
215
+ def subjobs_summary
216
+ return "" unless subjobs.count > 0
217
+ [].tap do |msg|
218
+ subjobs.map {|subjob| msg << subjob.summary}
219
+ end.join("\n")
220
+ end
221
+
215
222
  def as_update(*args)
216
223
  feedback.as_update(*args)
217
224
  end
@@ -310,13 +317,6 @@ module Eco
310
317
  end
311
318
  end
312
319
 
313
- def subjobs_summary
314
- return "" unless subjobs.count > 0
315
- [].tap do |msg|
316
- subjobs.map {|subjob| msg << subjob.summary}
317
- end.join("\n")
318
- end
319
-
320
320
  end
321
321
  end
322
322
  end
@@ -94,7 +94,7 @@ module Eco
94
94
  callback.call(job, job_status) if callback
95
95
  end
96
96
  end
97
-
97
+ launch(simulate: simulate) if pending?
98
98
  return status
99
99
  end
100
100
 
@@ -96,6 +96,7 @@ module Eco
96
96
  self.class.counter(DELAY_BETWEEN_GROUPS) if !simulate && idx < @order.length - 1
97
97
  end
98
98
  end
99
+ launch(simulate: simulate) if pending?
99
100
  return status
100
101
  end
101
102
 
@@ -122,7 +122,9 @@ module Eco
122
122
  def valid_index(index: nil, entry: nil)
123
123
  index ||= @hash[entry]
124
124
  unless index && index < @queue.length
125
- fatal "You must provide either the index on the final 'queue' or the original entry object of the batch"
125
+ msg = "You must provide either the index on the final 'queue' or the original entry object of the batch. "
126
+ msg += "Given, index=#{index.class}, entry:#{entry.class}"
127
+ fatal msg
126
128
  end
127
129
  index
128
130
  end
data/lib/eco/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = "2.0.3"
2
+ VERSION = "2.0.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eco-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
@@ -116,7 +116,7 @@ dependencies:
116
116
  requirements:
117
117
  - - ">="
118
118
  - !ruby/object:Gem::Version
119
- version: 0.8.1
119
+ version: 0.8.2
120
120
  - - "<"
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0.9'
@@ -126,7 +126,7 @@ dependencies:
126
126
  requirements:
127
127
  - - ">="
128
128
  - !ruby/object:Gem::Version
129
- version: 0.8.1
129
+ version: 0.8.2
130
130
  - - "<"
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0.9'
@@ -136,7 +136,7 @@ dependencies:
136
136
  requirements:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
- version: 0.8.3
139
+ version: 0.8.6
140
140
  - - "<"
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0.9'
@@ -146,7 +146,7 @@ dependencies:
146
146
  requirements:
147
147
  - - ">="
148
148
  - !ruby/object:Gem::Version
149
- version: 0.8.3
149
+ version: 0.8.6
150
150
  - - "<"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0.9'