3scale/porta

View on GitHub
app/events/base_event_store_event.rb

Summary

Maintainability
A
0 mins
Test Coverage
class BaseEventStoreEvent < RailsEventStore::Event

  PUBLISHER = ->(*args) { Rails.application.config.event_store.publish_event(*args) }

  module Categorizable
    extend ActiveSupport::Concern

    included do
      class_attribute :category
    end
  end

  def initialize(args = {})
    super(**args)
  end

  def publish
    PUBLISHER.call(self)
  end

  include Categorizable

  class << self

    def create_and_publish!(*args)
      return unless valid?(*args)

      event = create(*args)

      PUBLISHER.call(event) && event
    end

    protected

    def create(*args)
      raise NotImplementedError, "expected #{self} to implement #{__method__}"
    end

    def valid?(*_args)
      true
    end
  end
end