Sha256: 1673bf95303f6ea36360e03721f6639a6cf29d5409797bf783a57208f43e5e08

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

module Stenotype
  #
  # {Stenotype::Event} represents a triggered event
  #
  class Event
    #
    # Delegates event to instance of {Stenotype::Event}.
    #
    # @example
    #
    #   Stenotype::Event.emit!(data, options, eval_context)
    #
    # @param data {Hash} Data to be published to the targets.
    # @param options {Hash} A hash of additional options to be tracked.
    # @param eval_context {Hash} A context having handler defined in {Stenotype::ContextHandlers}.
    # @param dispatcher {#publish} A dispatcher object responding to [#publish]
    # @return {Stenotype::Event} An instance of {Stenotype::Event}
    #
    def self.emit!(data, options: {}, eval_context: {}, dispatcher: Stenotype.config.dispatcher)
      event = new(data, options: options, eval_context: eval_context, dispatcher: dispatcher)
      event.emit!
      event
    end

    attr_reader :data, :options, :eval_context, :dispatcher

    #
    # @example
    #
    #   Stenotype::Event.emit!(data, options, eval_context)
    #
    # @param {Hash} data Data to be published to the targets.
    # @param {Hash} options A hash of additional options to be tracked.
    # @param {Hash} eval_context A context having handler defined in {Stenotype::ContextHandlers}.
    # @param dispatcher {#publish} A dispatcher object responding to [#publish].
    # @return {Stenotype::Event} An instance of event
    #
    def initialize(data, options: {}, eval_context: {}, dispatcher: Stenotype.config.dispatcher)
      @data = data
      @options = options
      @eval_context = eval_context
      @dispatcher = dispatcher
    end

    #
    # Emits a {Stenotype::Event}.
    #
    # @example
    #
    #   event = Stenotype::Event.new(data, options, eval_context)
    #   event.emit!
    #
    def emit!
      dispatcher.publish(self)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
stenotype-0.1.0 lib/stenotype/event.rb