Module: CanvasSync::Concerns::LiveEventSync

Extended by:
ActiveSupport::Concern
Defined in:
lib/canvas_sync/concerns/live_event_sync.rb

Constant Summary collapse

VALID_CONFIG_KEYS =
%i[event_prefix key].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.lookup_event_model(event_model) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/canvas_sync/concerns/live_event_sync.rb', line 13

def self.lookup_event_model(event_model)
  self.registered_models.each do |model|
    event_prefix = model.live_events_config[:event_prefix].presence || model.name.underscore
    return model if event_model.to_s == event_prefix.to_s
  end
  nil
end

.register_model(model) ⇒ Object



9
10
11
# File 'lib/canvas_sync/concerns/live_event_sync.rb', line 9

def self.register_model(model)
  self.registered_models << model
end

.split_event_name(event_name) ⇒ Object



21
22
23
24
# File 'lib/canvas_sync/concerns/live_event_sync.rb', line 21

def self.split_event_name(event_name)
  model, _, subtype = event_name.rpartition('_')
  [model.to_sym, subtype.to_sym]
end

Instance Method Details

#current_live_eventObject



91
92
93
# File 'lib/canvas_sync/concerns/live_event_sync.rb', line 91

def current_live_event
  Thread.current[:cs_current_live_event]
end

#process_live_event(event_type, payload, metadata) ⇒ Object



95
96
97
98
99
100
101
102
103
# File 'lib/canvas_sync/concerns/live_event_sync.rb', line 95

def process_live_event(event_type, payload, )
  if self.has_attribute?(:workflow_state) && payload['workflow_state'].present? && payload['workflow_state'] == 'deleted'
    # API will respond with 404, so just update the workflow_state
    update(workflow_state: payload['workflow_state'])
  else
    api_response = request_from_api
    assign_from_api_params(api_response)
  end
end