canvas_sync 0.22.11 → 0.22.12.beta1
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/lib/canvas_sync/concerns/live_event_sync.rb +74 -6
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/batch_tree.js +2 -2
- data/lib/canvas_sync/job_batches/jobs/concurrent_batch_job.rb +1 -1
- data/lib/canvas_sync/jobs/term_batches_job.rb +2 -2
- data/lib/canvas_sync/live_events/process_event_job.rb +1 -1
- data/lib/canvas_sync/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76f6f3637d9ecdc189ecc30fdac1016655a43d0bd86af95e4662c000a96a8210
|
4
|
+
data.tar.gz: 573116e847a84823a69a293266f29a47c9979a9ad3207177702657a796ed5310
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44ae47c098f47555afee2d9bdcbba35b8ac7afbf5dadbece224c133ffefccd4efb32023d0b38a698f48e9cb24427e07ce7cc6ed34cbcc0181c80ec7bc38a430c
|
7
|
+
data.tar.gz: 05347f7d9b3f0950c05ae6af133d7ea6d0e9237b8fa4f7872faa4fc93233e5ed4aa9050955f90515744fb15fd8d8f52112a813c08151e848c918c4135741d8b3
|
@@ -3,27 +3,95 @@ module CanvasSync::Concerns
|
|
3
3
|
module LiveEventSync
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
+
mattr_accessor :registered_models
|
7
|
+
self.registered_models = []
|
8
|
+
|
9
|
+
def self.register_model(model)
|
10
|
+
self.registered_models << model
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.lookup_event_model(event_model)
|
14
|
+
self.registered_models.each do |model|
|
15
|
+
event_prefix = model.live_events_config[:event_prefix].presence || model.name.underscore
|
16
|
+
return model if event_model == event_prefix
|
17
|
+
end
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.split_event_name(event_name)
|
22
|
+
model, _, subtype = event_name.rpartition('_')
|
23
|
+
[model, subtype.to_sym]
|
24
|
+
end
|
25
|
+
|
6
26
|
included do
|
7
27
|
define_model_callbacks :process_live_event
|
28
|
+
CanvasSync::Concerns::LiveEventSync.register_model(self)
|
8
29
|
end
|
9
30
|
|
31
|
+
VALID_CONFIG_KEYS = %i[event_prefix key].freeze
|
32
|
+
|
10
33
|
class_methods do
|
34
|
+
def live_events_config(**kwargs)
|
35
|
+
@live_events_config ||= {}
|
36
|
+
if kwargs.present?
|
37
|
+
raise ArgumentError, "Invalid keys: #{kwargs.keys - VALID_CONFIG_KEYS}" if (kwargs.keys - VALID_CONFIG_KEYS).present?
|
38
|
+
@live_events_config.merge!(kwargs)
|
39
|
+
end
|
40
|
+
@live_events_config
|
41
|
+
end
|
42
|
+
|
11
43
|
def cs_internal_process_live_event(event)
|
12
44
|
meta = event[:metadata]
|
13
45
|
payload = event[:payload] || event[:body]
|
14
46
|
|
15
|
-
model,
|
16
|
-
|
17
|
-
|
47
|
+
model, subtype = CanvasSync::Concerns::LiveEventSync.split_event_name(meta[:event_name])
|
48
|
+
cfg = self.live_events_config
|
49
|
+
|
50
|
+
Thread.current[:cs_current_live_event] = {
|
51
|
+
event: meta[:event_name],
|
52
|
+
type: model,
|
53
|
+
action: subtype,
|
54
|
+
meta: meta,
|
55
|
+
payload: payload,
|
56
|
+
}
|
57
|
+
|
58
|
+
pkey = cfg[:key]
|
59
|
+
if pkey.present?
|
60
|
+
if pkey.is_a?(Symbol)
|
61
|
+
lookup = payload[pkey]
|
62
|
+
elsif pkey.is_a?(Proc)
|
63
|
+
lookup = pkey.call(payload, meta)
|
64
|
+
end
|
65
|
+
else
|
66
|
+
lookup = payload[:id]
|
67
|
+
lookup ||= payload[:"#{cfg[:event_prefix]}_id"] if cfg[:event_prefix].present?
|
68
|
+
lookup ||= payload[:"#{model}_id"]
|
69
|
+
lookup ||= payload[:"#{name.underscore}_id"]
|
70
|
+
end
|
71
|
+
|
72
|
+
if lookup.is_a?(String) || lookup.is_a?(Numeric)
|
73
|
+
lookup = { canvas_id: lookup }
|
74
|
+
end
|
75
|
+
|
76
|
+
if lookup.is_a?(Hash)
|
77
|
+
inst = self.find_or_initialize_by(**lookup)
|
78
|
+
elsif lookup.is_a?(ActiveRecord::Base)
|
79
|
+
inst = lookup
|
80
|
+
end
|
18
81
|
|
19
82
|
result = inst.run_callbacks(:process_live_event) do
|
20
|
-
inst.process_live_event(subtype
|
83
|
+
inst.process_live_event(subtype, payload, meta)
|
21
84
|
end
|
22
85
|
|
23
86
|
inst.save! if result != false && inst.changed?
|
87
|
+
Thread.current[:cs_current_live_event] = nil
|
24
88
|
end
|
25
89
|
end
|
26
90
|
|
91
|
+
def current_live_event
|
92
|
+
Thread.current[:cs_current_live_event]
|
93
|
+
end
|
94
|
+
|
27
95
|
def process_live_event(event_type, payload, metadata)
|
28
96
|
if self.has_attribute?(:workflow_state) && payload['workflow_state'].present? && payload['workflow_state'] == 'deleted'
|
29
97
|
# API will respond with 404, so just update the workflow_state
|
@@ -41,8 +109,8 @@ module CanvasSync::Concerns
|
|
41
109
|
|
42
110
|
event_type = meta[:event_name]
|
43
111
|
|
44
|
-
model,
|
45
|
-
mcls = model
|
112
|
+
model, subtype = split_event_name(event_type)
|
113
|
+
mcls = lookup_event_model(model)
|
46
114
|
|
47
115
|
if mcls.present? && mcls < LiveEventSync
|
48
116
|
mcls.cs_internal_process_live_event(event)
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import { h, Component, render } from 'https://
|
2
|
-
import htm from 'https://
|
1
|
+
import { h, Component, render } from 'https://esm.sh/preact';
|
2
|
+
import htm from 'https://esm.sh/htm';
|
3
3
|
import { root_url } from './util.js';
|
4
4
|
|
5
5
|
// Initialize htm with Preact
|
@@ -19,14 +19,14 @@ module CanvasSync
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
JobBatches::ManagedBatchJob.make_batch(jobs, ordered: false, concurrency:
|
22
|
+
JobBatches::ManagedBatchJob.make_batch(jobs, ordered: false, concurrency: 8) do |b|
|
23
23
|
b.description = "TermBatchJob(#{term_id}) Root"
|
24
24
|
b.context = local_context
|
25
25
|
b.on(:success, "#{self.class.to_s}.batch_finished") unless options[:mark_synced] == false
|
26
26
|
end
|
27
27
|
end
|
28
28
|
else
|
29
|
-
JobBatches::ConcurrentBatchJob.make_batch(jobs, context: context)
|
29
|
+
JobBatches::ConcurrentBatchJob.make_batch(jobs, context: context, concurrency: 8)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -10,7 +10,7 @@ module CanvasSync::LiveEvents
|
|
10
10
|
legacy_handler.perform_later(event)
|
11
11
|
return
|
12
12
|
rescue LoadError, NameError => e
|
13
|
-
Rails.logger.error("Error accessing legacy-style LiveEvents handler #{e}, #{event}")
|
13
|
+
# Rails.logger.error("Error accessing legacy-style LiveEvents handler #{e}, #{event}")
|
14
14
|
end
|
15
15
|
|
16
16
|
handlers = CanvasSync::LiveEvents.registered_handlers
|
data/lib/canvas_sync/version.rb
CHANGED
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.22.
|
4
|
+
version: 0.22.12.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Instructure CustomDev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-03-
|
11
|
+
date: 2025-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|