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