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