module RabbitFeed::Producer

Attributes

event_definitions[RW]

Public Instance Methods

publish_event(name, payload) click to toggle source
# File lib/rabbit_feed/producer.rb, line 7
def publish_event(name, payload)
  raise RabbitFeed::Error, 'Unable to publish event. No event definitions set.' unless event_definitions.present?
  (event_definition = event_definitions[name]) || (raise RabbitFeed::Error, "definition for event: #{name} not found")
  timestamp         = Time.now.utc
  metadata          = (metadata event_definition.version, name, timestamp)
  event             = Event.new metadata, payload, event_definition.schema, event_definition.sensitive_fields
  RabbitFeed.log.info { { event: :publish_start, metadata: event.metadata } }
  ProducerConnection.instance.publish event.serialize, (options name, timestamp)
  RabbitFeed.log.info { { event: :publish_end, metadata: event.metadata } }
  event
end

Private Instance Methods

metadata(version, name, timestamp) click to toggle source
# File lib/rabbit_feed/producer.rb, line 21
def metadata(version, name, timestamp)
  {
    'application'    => RabbitFeed.configuration.application,
    'host'           => Socket.gethostname,
    'environment'    => RabbitFeed.environment,
    'created_at_utc' => timestamp.iso8601(6),
    'version'        => version,
    'name'           => name,
    'schema_version' => Event::SCHEMA_VERSION
  }
end
options(event_name, timestamp) click to toggle source
# File lib/rabbit_feed/producer.rb, line 37
def options(event_name, timestamp)
  {
    routing_key: (routing_key event_name),
    type:        event_name,
    app_id:      RabbitFeed.configuration.application,
    timestamp:   timestamp.to_i
  }
end
routing_key(event_name) click to toggle source
# File lib/rabbit_feed/producer.rb, line 33
def routing_key(event_name)
  "#{RabbitFeed.environment}#{RabbitFeed.configuration.route_prefix_extension}.#{RabbitFeed.configuration.application}.#{event_name}"
end