class Columbo::Resource::Publisher

Public Class Methods

new(object) click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 5
def initialize(object)
  @object = object
end

Public Instance Methods

publish(event_type, options = {}, &block) click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 9
def publish(event_type, options = {}, &block)
  begin
    publish_event(event_type, options, &block)
  rescue Exception => e
    Columbo.logger.warn(e.message)
    false
  end
end
publish!(event_type, options = {}, &block) click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 18
def publish!(event_type, options = {}, &block)
  publish_event(event_type, options, &block)
end

Private Instance Methods

actor() click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 58
def actor
  @payload.actor || @object.columbo_actor
end
build_event(event_type) click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 73
def build_event(event_type)
  {
    system: system,
    actor: actor,
    resource: resource,
    related_resources: related_resources,
    timestamp: @payload.timestamp || DateTime.now.utc.to_formatted_s(:iso8601),
    action: @payload.action || "#{@object.class.name.underscore}.#{event_type}"
  }
end
default_resource_label() click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 69
def default_resource_label
  "#{@object.class.name.underscore}##{@object.id}"
end
publish_event(event_type, options, &block) click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 24
def publish_event(event_type, options, &block)
  @payload = OpenStruct.new(resource: {})
  block.call(@payload) if block_given?

  if Columbo.client.is_a? Columbo::Client::AMQP
    options = { routing_key: "#{@object.class.name.underscore}.#{event_type}" }.merge(options)
  end

  Columbo.client.publish(build_event(event_type), options)
end
resource() click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 35
def resource
  resource_label = @payload.resource[:label]
  if resource_label.nil?
    resource_label = @object.respond_to?(:columbo_resource_label) ? @object.columbo_resource_label : default_resource_label
  end

  resource_attributes = @payload.resource[:attributes]
  if resource_attributes.nil?
    resource_attributes = @object.respond_to?(:columbo_payload) ? @object.columbo_payload : @object.as_json
  end

  {
    uid: @payload.resource[:uid] || @object.id,
    type: @payload.resource[:type] || @object.class.name.underscore,
    label: resource_label,
    attributes: resource_attributes
  }
end
system() click to toggle source
# File lib/columbo_rails_client/publisher.rb, line 54
def system
  @payload.system || Columbo.configuration.system.to_h
end