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