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