eco-helpers 2.0.34 → 2.0.35

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: 420f5871108edb8c66a534f60a4f8303352245a5080c68398ccd1dc34974a606
4
- data.tar.gz: c176a43c046adf47520d18af6db7a92225786625051f2982b6ffdd1540c722e7
3
+ metadata.gz: b4d6a312dda42afc3e6ba2becccf69d42121024d9b81e2c37276719089521971
4
+ data.tar.gz: a3536e8fba79c1600135b4c4fd523a9c3a5262d605c39c751a3dc278d096b96e
5
5
  SHA512:
6
- metadata.gz: 1e1b2828dc5ba988364eb04f9433fff624694d6371ba5e3aa80bc4d4ee3c6cc62eb90cd2693a1e324a630043e19666d1499e5e8fdfff69c03adccd777e387494
7
- data.tar.gz: 5b2d6ba34b14b4164512e3ffd5c65ab2c4edac3c0452ff4dcd422b32537fcff47c244f85b815c4f55b0d313b546cf786dabe49d76cc5feaf374b1039cdc7c266
6
+ metadata.gz: 8fcb26823bc3b6e3d35522c13d410094ea056269c14dea3b47bcaf16991ff36cde9537507a6a21c952aa15f590fb1f5b1fc594e55d08f04782a8e2802c695d0c
7
+ data.tar.gz: fb2768c6e345da3dec034e7793876ecf25ae1cff76a059d98a38d9328c57884efb2a2f0b449eb28aea686ba074e477875fd8ba30201773170935f1c766fd45ae
data/CHANGELOG.md CHANGED
@@ -1,7 +1,27 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
- ## [2.0.34] - 2021-08-xx
4
+ ## [2.0.35] - 2021-08-30
5
+
6
+ ### Added
7
+ - `Eco::API::UseCases::OozeSamples::OozeBaseCase`
8
+ - `#new_target` optional warning when switching `target`
9
+ - `block` that is called when switching target and there were unsaved changes
10
+ - `#dirty?` helper method to check if there are changes
11
+ - `#before_loading_new_target` hook to allow child classes to anticipate when the `target` is going to change
12
+
13
+ ### Changed
14
+ - `Eco::API::UseCases::OozeSamples::Helpers::Shortcuts#object_reference` improved reference text
15
+ - `Eco::API::UseCases::OozeSamples::RegisterUpdateCase`
16
+ - added resilience when switching target (i.e. from one stage to another stage in same entry)
17
+ - added `batch_queue`
18
+
19
+ ### Fixed
20
+ - `Eco::API::UseCases::OozeSamples::RegisterUpdateCase`
21
+ - actual `batch_size` updates
22
+ - actual safe switch of target (i.e. against another stage of same ooze)
23
+
24
+ ## [2.0.34] - 2021-08-28
5
25
 
6
26
  ### Added
7
27
  - `Eco::API::UseCases::OozeSamples::OozeBaseCase` refactored ooze base case
@@ -12,8 +32,6 @@ All notable changes to this project will be documented in this file.
12
32
  - `Eco::API::UseCases::OozeSamples::OozeUpdateCase` remove unnecessary code and helpers that are now inherited from `OoozeBaseCase`
13
33
  - `Eco::API::UseCases::OozeSamples::OozeFromDocCase` remove unnecessary code
14
34
 
15
- ### Fixed
16
-
17
35
 
18
36
  ## [2.0.33] - 2021-08-16
19
37
 
data/eco-helpers.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 3.6"
32
32
 
33
33
  spec.add_dependency 'ecoportal-api', '>= 0.8.3', '< 0.9'
34
- spec.add_dependency 'ecoportal-api-v2', '>= 0.8.11', '< 0.9'
34
+ spec.add_dependency 'ecoportal-api-v2', '>= 0.8.12', '< 0.9'
35
35
  spec.add_dependency 'aws-sdk-s3', '>= 1.83.0', '< 2'
36
36
  spec.add_dependency 'aws-sdk-ses', '>= 1.36.0', '< 2'
37
37
  spec.add_dependency 'dotenv', '>= 2.7.6', '< 2.8'
@@ -59,16 +59,16 @@ module Eco
59
59
  "".tap do |ref|
60
60
  case obj
61
61
  when Ecoportal::API::V2::Page::Stage
62
- ref << "Stage "
62
+ ref << "Stage"
63
63
  when Ecoportal::API::V2::Pages::PageStage
64
- ref << "StagePage "
64
+ ref << "Page (#{obj.id}) (#{object_reference(obj.current_stage)})"
65
65
  when Ecoportal::API::V2::Page
66
- ref << "Page "
66
+ ref << "Page"
67
67
  end
68
- ref << "'#{obj.name}' " if obj.respond_to?(:name)
68
+ ref << " '#{obj.name}'" if obj.respond_to?(:name)
69
69
  end
70
70
  end
71
-
71
+
72
72
  end
73
73
  end
74
74
  end
@@ -9,6 +9,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
9
9
  attr_reader :target
10
10
 
11
11
  SAVE_PATCH = "ooze_patch_update.json"
12
+ DRY_COUNT = 5
12
13
 
13
14
  def main(session, options, usecase)
14
15
  raise "You need to inherit from this class ('#{self.class}') and call super with a block" unless block_given?
@@ -26,8 +27,13 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
26
27
 
27
28
  private
28
29
 
30
+ # Hook method to use before the target is switched
31
+ def before_loading_new_target(ooze_id)
32
+ end
33
+
29
34
  def ooze(ooze_id = nil, stage_id: nil)
30
35
  return target unless ooze_id
36
+ before_loading_new_target(ooze_id)
31
37
  apiv2.pages.get(ooze_id, stage_id: stage_id).tap do |ooze|
32
38
  if ooze
33
39
  new_target(ooze)
@@ -47,6 +53,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
47
53
 
48
54
  if stg = ooze.stages[id_name] || ooze.stages.get_by_name(id_name)
49
55
  return ooze if ooze.respond_to?(:current_stage_id) && (ooze.current_stage_id == stg.id)
56
+ before_loading_new_target(ooze_id)
50
57
  return apiv2.pages.get(ooze_id, stage_id: stg.id).tap do |stage|
51
58
  if stage
52
59
  new_target(stage)
@@ -61,12 +68,13 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
61
68
 
62
69
  def update_ooze(ooze = target)
63
70
  if !options[:simulate]
71
+ return unless dirty?(ooze)
64
72
  apiv2.pages.update(ooze).tap do |response|
65
73
  if response.success?
66
74
  ooze.consolidate!
67
- logger.info("Successful update of '#{ooze.name}' (#{ooze.id})")
75
+ logger.info("Successful update of #{object_reference(ooze)}")
68
76
  else
69
- logger.error("Could not update '#{ooze.name}' (#{ooze.id}): #{response.body}")
77
+ logger.error("Could not update #{object_reference(ooze)} (created_at: #{ooze.created_at}: #{response.body}")
70
78
  end
71
79
  end
72
80
  else
@@ -76,17 +84,26 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
76
84
  end
77
85
  end
78
86
  backup_patch!(ooze)
79
- exit(0) if dry_count > 5
87
+ exit(0) if dry_count > DRY_COUNT
80
88
  end
81
89
  end
82
90
 
83
- def new_target(object)
84
- if target && patch_doc(target)["page"]
85
- logger.warn "You you are switching to a new target #{object_reference(object)} after doing unsaved changes to #{object_reference(target)}"
91
+ def new_target(object, warn_pending_changes: true)
92
+ if dirty?(target)
93
+ if warn_pending_changes
94
+ msg = "You you are switching to a new target #{object_reference(object)}"
95
+ msg += " after doing unsaved changes to #{object_reference(target)}"
96
+ logger.warn msg
97
+ end
98
+ yield(target) if block_given?
86
99
  end
87
100
  @target = object
88
101
  end
89
102
 
103
+ def dirty?(object)
104
+ object && patch_doc(object)["page"]
105
+ end
106
+
90
107
  def backup_patch!(ooze = target)
91
108
  unless patch = (patch_doc(ooze) || {})["page"]
92
109
  logger.info "No changes to update for #{object_reference(ooze)}."
@@ -6,11 +6,11 @@
6
6
  class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::OozeSamples::OozeBaseCase
7
7
 
8
8
  class << self
9
- attr_reader :batch_size
10
-
11
9
  # @return [Integer] the number of pages to be processed in each batch
12
- def batch_size
13
- @batch_size || 25
10
+ def batch_size(size = nil)
11
+ @batch_size ||= 25
12
+ return @batch_size unless size
13
+ @batch_size = size
14
14
  end
15
15
  end
16
16
 
@@ -31,39 +31,95 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
31
31
 
32
32
  private
33
33
 
34
+ def before_loading_new_target(ooze_id)
35
+ if pending = queue_shift(ooze_id)
36
+ update_ooze(pending)
37
+ end
38
+ end
39
+
40
+ def new_target(object, warn_pending_changes: false)
41
+ enqueue(object)
42
+ super(object, warn_pending_changes: warn_pending_changes) do |pending|
43
+ #queue(pending)
44
+ end
45
+ end
46
+
34
47
  def with_each_entry
35
48
  batched_search_results do |page_results|
36
- batched_oozes = page_results.map do |page_result|
37
- # TODO: Logics to get the correct PageStage
38
- if ooze = new_target(ooze(page_result.id))
39
- yield(ooze)
49
+ page_results.each do |page_result|
50
+ if pending = queue_shift(page_result.id)
51
+ if dirty?(pending)
52
+ msg = "Inconsistent search results. "
53
+ msg << "Launching update on '#{object_reference(pending)}' to be able to queue it back"
54
+ console.warn msg
55
+ update_ooze(pending)
56
+ end
57
+ end
58
+ if ooz = ooze(page_result.id)
59
+ yield(ooz)
40
60
  end
41
- ooze
42
61
  end
43
- update_oozes(batched_oozes)
62
+ update_oozes
63
+ end
64
+ end
65
+
66
+ def enqueue(object)
67
+ return unless object && object.respond_to?(:id)
68
+ if elem = queue_get(object.id)
69
+ msg = "Something is wrong. Native case 'RegisterUpdateCase' is "
70
+ if (elem != object) && dirty?(elem)
71
+ msg << "trying to queue different objects with same page id:\n"
72
+ msg << " • already queued (changes will go): #{object_reference(elem)}\n"
73
+ msg << " • tried to queue (lost changes): #{object_reference(object)}"
74
+ logger.warn msg
75
+ end
76
+ else
77
+ batch_queue << object unless batch_queue.include?(object)
78
+ end
79
+ end
80
+
81
+ def queue_shift(id = nil)
82
+ if id
83
+ batch_queue.delete(queue_get(id))
84
+ else
85
+ batch_queue.shift
44
86
  end
45
87
  end
46
88
 
89
+ def queue_get(id)
90
+ batch_queue.find {|e| e.id == id}
91
+ end
92
+
93
+ def batch_queue
94
+ @batch_queue ||= []
95
+ end
96
+
47
97
  def batched_search_results
48
98
  raise "Missing block. It yields in slices of #{self.class.batch_size} results" unless block_given?
49
99
  results_preview
50
- i = 0; results = []
100
+ results = []
51
101
  apiv2.registers.search(register_id, search_options) do |page_result|
52
- i += 1
53
102
  results << page_result
54
- if i <= self.class.batch_size
103
+ if results.length >= self.class.batch_size
55
104
  yield(results)
56
105
  results = []
57
- i = 0
58
106
  end
59
107
  end
60
108
  yield(results) unless results.empty?
61
109
  end
62
110
 
63
- def update_oozes(batched_oozes)
111
+ def update_oozes(batched_oozes = batch_queue)
64
112
  batched_oozes.each do |ooze|
65
113
  update_ooze(ooze)
66
114
  end
115
+ batched_oozes.clear
116
+ end
117
+
118
+ def backup_patch!(ooze = target)
119
+ unless patch = (patch_doc(ooze) || {})["page"]
120
+ logger.info "No changes to update for #{object_reference(ooze)}."
121
+ return
122
+ end
67
123
  end
68
124
 
69
125
  def results_preview
data/lib/eco/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = "2.0.34"
2
+ VERSION = "2.0.35"
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.34
4
+ version: 2.0.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
@@ -136,7 +136,7 @@ dependencies:
136
136
  requirements:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
- version: 0.8.11
139
+ version: 0.8.12
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.11
149
+ version: 0.8.12
150
150
  - - "<"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0.9'