hekenga 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a5b2feed38ae6373320ea9097c0677cd3ba26c9ed72485d802abf846c4474d4
4
- data.tar.gz: bbdaadd072871e04936b451f584c1ff72e111a7d26993b9e87c58df9f50fd7f7
3
+ metadata.gz: 94824a7ff42ed31e87c54b5093ad9b8a03b27b08ec5cc7c4f45491b71b3dcc79
4
+ data.tar.gz: ca0ffaded81560273fa6421de3dfdb9a0efce0fd62f95c410bd31004cb17a816
5
5
  SHA512:
6
- metadata.gz: 1f93f0e083ca321cdc5be3ade1c8e32ec72ac57c4520073e91b8b6bede680a88dd13d921cc8efdc45b6352b307a9996f92c10c1eac4cf61c5857fd6eaf7ae250
7
- data.tar.gz: 8dca120b22a5a4a270f8649f8dfa53609d11c803b17dd901c0a2f0e524b25bb91a9ae342c6782a2d60d59a8a29abc8c9c285a099772ca4403bb91c254d9a0a93
6
+ metadata.gz: 8677a4cd8023f511971b54ac4458e7b230ee693246473d77b9e3237895ef95670aa157d0117f13223a0df4dde71430de9c940bfc89315422203e23ec3434218e
7
+ data.tar.gz: 69b879e26c4d7771377881d9e83d411fa3b0a2674ce851b5b9b74f323c1c2dec749218257766b27e467eb409708f221d9125a8451bd9d394b103e654e86785da
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.1.0
4
+
5
+ - `setup` is now passed the current batch of documents so it can be used to
6
+ preload effectively
7
+ - `after` has been added - this is a block of code that will be passed the
8
+ current batch of written documents after a write has been completed. If
9
+ no documents were written, this block will not be called
10
+
11
+ ## v1.0.4
12
+
13
+ - Log errors during document tasks to stdout
14
+
3
15
  ## v1.0.3
4
16
 
5
17
  - Fix `timeless!` being ignored
@@ -1,7 +1,7 @@
1
1
  require 'hekenga/irreversible'
2
2
  module Hekenga
3
3
  class DocumentTask
4
- attr_reader :ups, :downs, :setups, :filters
4
+ attr_reader :ups, :downs, :setups, :filters, :after_callbacks
5
5
  attr_accessor :parallel, :scope, :timeless, :batch_size
6
6
  attr_accessor :description, :invalid_strategy, :skip_prepare, :write_strategy
7
7
  attr_accessor :always_write, :use_transaction
@@ -11,6 +11,7 @@ module Hekenga
11
11
  @downs = []
12
12
  @setups = []
13
13
  @filters = []
14
+ @after_callbacks = []
14
15
  @invalid_strategy = :continue
15
16
  @write_strategy = :update
16
17
  @skip_prepare = false
@@ -13,6 +13,7 @@ module Hekenga
13
13
  @skipped_records = []
14
14
  @failed_records = []
15
15
  @backed_up_records = {}
16
+ @seen_errors = []
16
17
  end
17
18
 
18
19
  def run!
@@ -27,6 +28,7 @@ module Hekenga
27
28
  # In test mode, the transaction will be aborted - so we need to write
28
29
  # the result outside of the run! block
29
30
  write_result if task_record.test_mode
31
+ after_callback
30
32
  end
31
33
  end
32
34
 
@@ -48,7 +50,9 @@ module Hekenga
48
50
 
49
51
  delegate :task_idx, to: :task_record
50
52
 
51
- attr_reader :migrated_records, :records_to_write, :filtered_records, :invalid_records, :skipped_records, :failed_records, :backed_up_records
53
+ attr_reader :migrated_records, :records_to_write, :filtered_records,
54
+ :invalid_records, :skipped_records, :failed_records, :backed_up_records,
55
+ :seen_errors
52
56
 
53
57
  def migration_complete?
54
58
  migration.task_records(task_idx).incomplete.none?
@@ -84,7 +88,8 @@ module Hekenga
84
88
  else
85
89
  skipped_records << record
86
90
  end
87
- rescue => _e
91
+ rescue => e
92
+ print_error(e)
88
93
  failed_records << record
89
94
  end
90
95
  end
@@ -94,7 +99,8 @@ module Hekenga
94
99
  backup_record(record)
95
100
  task.up!(@context, record)
96
101
  migrated_records << record
97
- rescue => _e
102
+ rescue => e
103
+ print_error(e)
98
104
  failed_records << record
99
105
  end
100
106
  end
@@ -201,7 +207,7 @@ module Hekenga
201
207
  @context = Hekenga::Context.new(test_mode: task_record.test_mode)
202
208
  begin
203
209
  task.setups&.each do |setup|
204
- @context.instance_exec(&setup)
210
+ @context.instance_exec(records, &setup)
205
211
  end
206
212
  rescue => e
207
213
  fail_and_cancel!(e)
@@ -212,6 +218,18 @@ module Hekenga
212
218
  @context = nil
213
219
  end
214
220
 
221
+ def after_callback
222
+ return if records_to_write.empty?
223
+
224
+ task.after_callbacks&.each do |callback|
225
+ @context.instance_exec(records_to_write, &callback)
226
+ end
227
+ rescue => e
228
+ # Error is just printed for now as we've already migrated, don't
229
+ # want to overwrite the task record state
230
+ print_error(e)
231
+ end
232
+
215
233
  def fail_and_cancel!(error)
216
234
  log = migration.log(task_idx)
217
235
  log.add_failure({
@@ -268,5 +286,13 @@ module Hekenga
268
286
  def task
269
287
  @task ||= migration.tasks[task_idx]
270
288
  end
289
+
290
+ def print_error(error)
291
+ message = [error.message, error.backtrace].join("\n")
292
+ return if seen_errors.include?(message.hash)
293
+
294
+ seen_errors << message.hash
295
+ Hekenga.log(message)
296
+ end
271
297
  end
272
298
  end
@@ -67,6 +67,10 @@ module Hekenga
67
67
  def down(&block)
68
68
  @object.downs.push block
69
69
  end
70
+
71
+ def after(&block)
72
+ @object.after_callbacks.push block
73
+ end
70
74
  end
71
75
  end
72
76
  end
@@ -50,8 +50,8 @@ module Hekenga
50
50
  # #write_strategy :update # :delete_then_insert
51
51
  #
52
52
  # # Called once per batch, instance variables will be accessible
53
- # # in the filter & up blocks
54
- # #setup do
53
+ # # in the filter, up and after blocks
54
+ # #setup do |docs|
55
55
  # #end
56
56
  #
57
57
  # #filter do |doc|
@@ -59,6 +59,10 @@ module Hekenga
59
59
  #
60
60
  # up do |doc|
61
61
  # end
62
+ #
63
+ # # Called once per batch passing successfully written records
64
+ # #after do |docs|
65
+ # #end
62
66
  #end
63
67
  end
64
68
  EOF
@@ -1,3 +1,3 @@
1
1
  module Hekenga
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hekenga
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tapio Saarinen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-08 00:00:00.000000000 Z
11
+ date: 2024-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler