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

Version Path
canvas_sync-0.21.0.beta4 lib/canvas_sync/concerns/live_event_sync.rb
canvas_sync-0.21.0.beta3 lib/canvas_sync/concerns/live_event_sync.rb
canvas_sync-0.21.0.beta2 lib/canvas_sync/concerns/live_event_sync.rb
canvas_sync-0.21.0.beta1 lib/canvas_sync/concerns/live_event_sync.rb