class Realm::SNS::Gateway

Public Class Methods

new(topic_arn:, queue_prefix: nil, event_processing_attempts: 3, **) click to toggle source
Calls superclass method
# File lib/realm/sns/gateway.rb, line 8
def initialize(topic_arn:, queue_prefix: nil, event_processing_attempts: 3, **)
  super
  @topic = TopicAdapter.new(topic_arn)
  @queue_prefix = queue_prefix
  @event_processing_attempts = event_processing_attempts
  @queue_map = {}
end

Public Instance Methods

add_listener(event_type, listener, queue_arn: nil) click to toggle source
# File lib/realm/sns/gateway.rb, line 16
def add_listener(event_type, listener, queue_arn: nil)
  queue = queue_arn ? queue_manager.get(arn: queue_arn) : provide_queue(event_type, listener)
  @queue_map[queue] = listener
end
queues() click to toggle source
# File lib/realm/sns/gateway.rb, line 35
def queues
  @queue_map.keys
end
trigger(event_type, attributes = {}) click to toggle source
# File lib/realm/sns/gateway.rb, line 21
def trigger(event_type, attributes = {})
  create_event(event_type, attributes).tap { |event| @topic.publish(event_type, event.to_json) }
end
worker(**options) click to toggle source
# File lib/realm/sns/gateway.rb, line 25
def worker(**options)
  @worker ||= Worker.new(
    @queue_map,
    event_factory: @event_factory,
    logger: @runtime && @runtime.context[:logger],
    event_processing_attempts: @event_processing_attempts,
    **options,
  )
end

Private Instance Methods

provide_queue(event_type, listener) click to toggle source
# File lib/realm/sns/gateway.rb, line 41
def provide_queue(event_type, listener)
  queue_name = [event_type.to_s.gsub('.', '_'), queue_suffix(listener)].join('-')
  queue = queue_manager.provide(queue_name)
  @topic.subscribe(event_type, queue)
  queue
end
queue_manager() click to toggle source
# File lib/realm/sns/gateway.rb, line 48
def queue_manager
  @queue_manager ||= QueueManager.new(prefix: @queue_prefix)
end
queue_suffix(listener) click to toggle source
# File lib/realm/sns/gateway.rb, line 52
def queue_suffix(listener)
  listener.try(:identifier) || SecureRandom.alphanumeric(16)
end