class Zaikio::Loom::Event

Attributes

id[R]
response_body[R]
status_code[R]

Public Class Methods

new(name, subject:, id: nil, link: nil, payload: nil, receiver: nil, timestamp: nil, version: nil) click to toggle source
# File lib/zaikio/loom/event.rb, line 10
def initialize(name, subject:, id: nil, link: nil, payload: nil, receiver: nil, timestamp: nil, version: nil) # rubocop:disable Metrics/AbcSize, Metrics/ParameterLists
  @event_name = name.to_s.count(".").zero? ? "#{configuration.apps.values.first.app_name}.#{name}" : name.to_s
  @id         = id || SecureRandom.uuid
  @link       = link
  @payload    = payload
  @receiver   = receiver
  @subject    = subject
  @timestamp  = timestamp
  @version    = version || configuration.version

  return if app_password

  configuration.logger.error("Zaikio::Loom is disabled – event password is missing")
end

Public Instance Methods

fire() click to toggle source
# File lib/zaikio/loom/event.rb, line 25
def fire # rubocop:disable Metrics/AbcSize
  log_event

  return false unless app_password && configuration.host

  uri = URI("#{configuration.host}/api/v1/events")

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == "https"

  response = http.request(build_request(uri))

  @status_code   = response.code.to_i
  @response_body = response.body

  response.is_a?(Net::HTTPSuccess)
end
to_h() click to toggle source
# File lib/zaikio/loom/event.rb, line 43
def to_h # rubocop:disable Metrics/MethodLength
  timestamp = @timestamp || Time.now.getutc

  {
    id:        @id,
    name:      @event_name,
    subject:   @subject,
    timestamp: timestamp.iso8601,
    receiver:  @receiver,
    version:   @version,
    payload:   @payload,
    link:      @link
  }.compact
end

Private Instance Methods

app_name() click to toggle source
# File lib/zaikio/loom/event.rb, line 60
def app_name
  @event_name.split(".").first
end
app_password() click to toggle source
# File lib/zaikio/loom/event.rb, line 64
def app_password
  configuration.apps[app_name].password
end
build_request(uri) click to toggle source
# File lib/zaikio/loom/event.rb, line 68
def build_request(uri)
  Net::HTTP::Post.new(uri, "User-Agent" => "zaikio-loom:#{Zaikio::Loom::VERSION}").tap do |request|
    request.basic_auth(app_name, app_password)
    request.body         = event_as_json
    request.content_type = "application/json"
  end
end
configuration() click to toggle source
# File lib/zaikio/loom/event.rb, line 76
def configuration
  Zaikio::Loom.configuration
end
event_as_json() click to toggle source
# File lib/zaikio/loom/event.rb, line 80
def event_as_json
  @event_as_json ||= Oj.dump({ event: to_h }, mode: :compat)
end
log_event() click to toggle source
# File lib/zaikio/loom/event.rb, line 84
def log_event
  configuration.logger.info("Zaikio::Loom event\n#{event_as_json}")
end