Sha256: 97e43660eef6cac09e094d047ff6e2a4752aca92d11dc1c203ec5a2df4e90c40
Contents?: true
Size: 1.18 KB
Versions: 4
Compression:
Stored size: 1.18 KB
Contents
module CanvasSync::Concerns module LiveEventSync extend ActiveSupport::Concern included do define_model_callbacks :process_live_event end class_methods do def cs_internal_process_live_event(event) meta = event[:metadata] payload = event[:payload] canvas_id = payload[:id] || payload[:"#{name.underscore}_id"] inst = self.find_or_initialize_by(canvas_id: canvas_id) model, _, subtype = meta[:event_name].rpartition('_') result = inst.run_callbacks(:process_live_event) do inst.process_live_event(subtype.to_sym, payload, meta) end inst.save! if result != false && inst.changed? end end def process_live_event(event_type, payload, metadata) api_response = request_from_api assign_from_api_params(api_response) end end CanvasSync::LiveEvents.listen do |event| meta = event[:metadata] payload = event[:payload] event_type = meta[:event_name] model, _, subtype = event_type.rpartition('_') mcls = model.classify.constantize rescue nil if mcls.present? && mcls < LiveEventSync mcls.cs_internal_process_live_event(event) end end end
Version data entries
4 entries across 4 versions & 1 rubygems