Sha256: 9ac7d803e621355145a9cc08581ad67cb426bf39896198d5b5a00d89ed3182d3
Contents?: true
Size: 1.23 KB
Versions: 3
Compression:
Stored size: 1.23 KB
Contents
# frozen_string_literal: true require_relative 'callback' module RabbitmqClient # Lifecycle defines the rabbitmq_client lifecycle events, # callbacks and manage the execution of these callbacks class Lifecycle EVENTS = { publish: %i[message options] }.freeze attr_reader :callbacks def initialize @callbacks = EVENTS.keys.each_with_object({}) do |key, hash| hash[key] = Callback.new end end def before(event, &block) add(:before, event, &block) end def after(event, &block) add(:after, event, &block) end def run_callbacks(event, *args, &block) missing_callback(event) unless @callbacks.key?(event) event_obj = EVENTS[event] event_size = event_obj.size unless event_size == args.size raise ArgumentError, "Callback #{event} expects\ #{event_size} parameter(s): #{event_obj.join(', ')}" end @callbacks[event].execute(*args, &block) end private def add(type, event, &block) missing_callback(event) unless @callbacks.key?(event) @callbacks[event].add(type, &block) end def missing_callback(event) raise InvalidCallback, "Unknown callback event: #{event}" end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rabbitmq_client-0.0.3 | lib/rabbitmq_client/lifecycle.rb |
rabbitmq_client-0.0.2 | lib/rabbitmq_client/lifecycle.rb |
rabbitmq_client-0.0.1 | lib/rabbitmq_client/lifecycle.rb |