lib/propono/services/publisher.rb in propono-0.5.4 vs lib/propono/services/publisher.rb in propono-0.5.5

- old
+ new

@@ -3,18 +3,43 @@ end class Publisher include Sns - def self.publish(topic, message) - new.publish(topic, message) + def self.publish(topic_id, message, options = {}) + new(topic_id, message, options).publish end - def publish(topic_id, message) + attr_reader :topic_id, :message, :protocol + + def initialize(topic_id, message, options = {}) raise PublisherError.new("Topic is nil") if topic_id.nil? raise PublisherError.new("Message is nil") if message.nil? + @topic_id = topic_id + @message = message + @protocol = options.fetch(:protocol, :sns).to_sym + end + + def publish + send("publish_via_#{protocol}") + end + + private + + def publish_via_sns topic = TopicCreator.find_or_create(topic_id) sns.publish(topic.arn, message) + end + + def publish_via_udp + payload = {topic: topic_id, message: message}.to_json + UDPSocket.new.send(payload, 0, config.udp_host, config.udp_port) + rescue SocketError => e + config.logger.puts "Udp2sqs failed to send : #{e}" + end + + def config + Configuration.instance end end end