class Osbourne::Topic

Attributes

name[R]
prefixed_name[R]

Public Class Methods

new(name) click to toggle source
# File lib/osbourne/topic.rb, line 8
def initialize(name)
  @name = name
  @prefixed_name = Osbourne.prefixer(name)
  arn
end

Public Instance Methods

arn() click to toggle source
# File lib/osbourne/topic.rb, line 14
def arn
  @arn ||= ensure_topic
end
publish(message) click to toggle source
# File lib/osbourne/topic.rb, line 18
def publish(message)
  parsed_message = parse(message)
  return if Osbourne.test_mode?

  Osbourne.logger.info "[Osbourne] [PUB] TOPIC: `#{prefixed_name}` MESSAGE: `#{parsed_message}`"
  sns.publish(topic_arn: arn, message: parsed_message)
end

Private Instance Methods

ensure_topic() click to toggle source
# File lib/osbourne/topic.rb, line 28
def ensure_topic
  return if Osbourne.test_mode?

  Osbourne.logger.debug "[Osbourne] Ensuring topic `#{prefixed_name}` exists"
  Osbourne.cache.fetch("osbourne_existing_topic_arn_for_#{prefixed_name}", ex: 1.minute) do
    sns.create_topic(name: prefixed_name).topic_arn
  end
end
parse(message) click to toggle source
# File lib/osbourne/topic.rb, line 41
def parse(message)
  return message if message.is_a?(String)
  return message.to_json if message.respond_to?(:to_json)

  raise ArgumentError, "Message must either be a string or respond to #to_json"
end
subscriptions_cache_key() click to toggle source
# File lib/osbourne/topic.rb, line 37
def subscriptions_cache_key
  "existing_sqs_subscriptions_for_#{prefixed_name}"
end