class Hivent::AbstractSignal

Attributes

client_id[R]
name[R]
producer[R]

Public Class Methods

new(name) click to toggle source
# File lib/hivent/abstract_signal.rb, line 8
def initialize(name)
  @name        = name
  @producer    = nil
  @client_id   = Hivent::Config.client_id
end

Public Instance Methods

emit(payload, version:, cid: nil, key: nil) click to toggle source
# File lib/hivent/abstract_signal.rb, line 14
def emit(payload, version:, cid: nil, key: nil)
  build_message(payload, cid, version).tap do |message|
    send_message(message, partition_key(key, message), version)
  end
end
receive(version: nil, &block) click to toggle source
# File lib/hivent/abstract_signal.rb, line 20
def receive(version: nil, &block)
  Hivent.emitter.on(event_name(version), &block)
  Hivent.emitter.events << { name: name, version: version }
end

Private Instance Methods

build_message(payload, cid, version) click to toggle source
# File lib/hivent/abstract_signal.rb, line 37
def build_message(payload, cid, version)
  {
    payload: payload,
    meta: meta_data(cid, version)
  }
end
event_name(version = nil) click to toggle source
# File lib/hivent/abstract_signal.rb, line 55
def event_name(version = nil)
  return Emitter::WILDCARD if name.to_sym == :*

  version ? "#{name}:#{version}" : name
end
meta_data(cid, version) click to toggle source
# File lib/hivent/abstract_signal.rb, line 44
def meta_data(cid, version)
  {
    event_uuid: SecureRandom.hex,
    name:       name,
    version:    version,
    cid:        (cid || SecureRandom.hex),
    producer:   client_id,
    created_at: Time.now.utc
  }
end
partition_key(key, message) click to toggle source
# File lib/hivent/abstract_signal.rb, line 27
def partition_key(key, message)
  key = key || message[:payload].to_json

  Zlib.crc32(key)
end
send_message(_message, _key, _version) click to toggle source
# File lib/hivent/abstract_signal.rb, line 33
def send_message(_message, _key, _version)
  raise NotImplementedError
end