canvas_sync 0.16.3 → 0.16.4

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
  SHA1:
3
- metadata.gz: 8a38d324ba9fe5a06ad6cd7f9bc4fa3686ad8389
4
- data.tar.gz: 9f67e4ad9dd7dc8be237871dd2224ee19a6e6e48
3
+ metadata.gz: ddf6a257acf95c92ba99a6d03c9bcdd99ba1a8ff
4
+ data.tar.gz: f10e8f91a225462545354a24daaf006a170bd90d
5
5
  SHA512:
6
- metadata.gz: 500266ca331f28db32e08c8e5d4f780f9e303299f07c3497f22a43236d50901b1f482dd08cd593338f11760aeb91693a1b43880809b024fb7ff6fe0bffe6fcfd
7
- data.tar.gz: 18add737517d8ee376c4905b953dfdd3519cefebd7787530ed46f8c33fd78f58c21794c8853a8bc3d392a85aecadca536a29ca4479b4fda569a256fcc9a43d6f
6
+ metadata.gz: cde3a3a534316a0faa535347a6c71aa63ab46c5cc5d9c21b01512bb623bed7f6b34fc7da38de345fefcf238cc44f0423f849dd08aa8f57f292472838aa6f7d0c
7
+ data.tar.gz: 2e1b8217af038166f60afe4032f0f1ec806761fb81d5727aec57540919146335f7a28292e8e81ba87220eb2d687325b8145be798ed6a29b07aaad0cd6e3b56f4
@@ -132,7 +132,7 @@ module CanvasSync
132
132
  duped_job_chain[:global_options][:fork_path] ||= []
133
133
  duped_job_chain[:global_options][:fork_keys] ||= []
134
134
  duped_job_chain[:global_options][:fork_path] << job_log.job_id
135
- duped_job_chain[:global_options][:fork_keys] << keys
135
+ duped_job_chain[:global_options][:fork_keys] << keys.map(&:to_s)
136
136
  duped_job_chain[:global_options][:on_failure] ||= 'CanvasSync::Jobs::ForkGather.handle_branch_error'
137
137
  sub_items = yield duped_job_chain
138
138
  sub_count = sub_items.respond_to?(:count) ? sub_items.count : sub_items
@@ -29,6 +29,33 @@ module CanvasSync::Concerns
29
29
  end
30
30
  end
31
31
 
32
+ def bulk_sync_from_api_result(api_array, conflict_target: :canvas_id, import_args: {}, all_pages: true, batch_size: 1000)
33
+ columns = api_sync_options.keys
34
+
35
+ update_conditions = {
36
+ condition: Importers::BulkImporter.condition_sql(self, columns),
37
+ columns: columns,
38
+ }
39
+ update_conditions[:conflict_target] = conflict_target if conflict_target.present?
40
+ options = { validate: false, on_duplicate_key_update: update_conditions }.merge(import_args)
41
+
42
+ if all_pages
43
+ batcher = BatchProcessor.new(of: batch_size) do |batch|
44
+ import(columns, batch, options)
45
+ end
46
+ api_array.all_pages_each do |api_item|
47
+ item = new.assign_from_api_params(api_items)
48
+ batcher << item
49
+ end
50
+ batcher.flush
51
+ else
52
+ items = api_array.map do |api_item|
53
+ new.assign_from_api_params(api_items)
54
+ end
55
+ import(columns, batch, options)
56
+ end
57
+ end
58
+
32
59
  def api_sync_options=(opts)
33
60
  @api_sync_options = opts
34
61
  end
@@ -1,3 +1,3 @@
1
1
  module CanvasSync
2
- VERSION = "0.16.3".freeze
2
+ VERSION = "0.16.4".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canvas_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.3
4
+ version: 0.16.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nate Collings
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-24 00:00:00.000000000 Z
11
+ date: 2020-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler