lib/maitredee/publisher.rb in maitredee-0.8.2 vs lib/maitredee/publisher.rb in maitredee-0.8.3
- old
+ new
@@ -1,14 +1,39 @@
module Maitredee
+ ##
+ # Inherit from this class to easily publish messages:
+ #
+ # class RecipePublisher < Maitredee::Publisher
+ #
+ # def initialize(recipe)
+ # @recipe = recipe
+ # end
+ #
+ # def process
+ # # do some work
+ # end
+ # end
+ #
+ # Then in your Rails app, you can do this:
+ #
+ # RecipePublisher.call(1, 2, 3)
+ #
+ # Note that `call` is a class method, `process` is an instance method.
class Publisher
class << self
+ # call #process and return publishes messages
+ # @param args [] arguments passed to #initialize
def call(*args)
publisher = new(*args)
publisher.process
publisher.published_messages
end
+ # set publish defaults
+ # @param topic_name [#to_s, nil]
+ # @param event_name [#to_s, nil]
+ # @param schema_name [#to_s, nil]
def publish_defaults(topic_name: nil, event_name: nil, schema_name: nil)
@publish_defaults = {
topic_name: topic_name,
event_name: event_name,
schema_name: schema_name
@@ -18,13 +43,21 @@
def get_publish_defaults
@publish_defaults
end
end
+ # array of messages published in this instance
+ # @return [Array<PublisherMessage>]
def published_messages
@published_messages ||= []
end
+ # publish a message with defaults
+ # @param topic_name [#to_s, nil]
+ # @param event_name [#to_s, nil]
+ # @param schema_name [#to_s, nil]
+ # @param primary_key [#to_s, nil]
+ # @param body [#to_json]
def publish(topic_name: nil, event_name: nil, schema_name: nil, primary_key: nil, body:)
defaults = self.class.get_publish_defaults
published_messages << Maitredee.publish(
topic_name: topic_name || defaults[:topic_name],
event_name: event_name || defaults[:event_name],