class RabbitFeed::Event

Constants

SCHEMA_VERSION

Attributes

metadata[R]
payload[R]
schema[R]
sensitive_fields[R]

Public Class Methods

deserialize(serialized_event) click to toggle source
# File lib/rabbit_feed/event.rb, line 43
def deserialize(serialized_event)
  datum_reader = Avro::IO::DatumReader.new
  reader       = Avro::DataFile::Reader.new (StringIO.new serialized_event), datum_reader
  event_hash   = nil
  reader.each do |datum|
    event_hash = datum
  end
  reader.close
  new event_hash['metadata'], event_hash['payload'], datum_reader.readers_schema
end
new(metadata, payload = {}, schema = nil, sensitive_fields = []) click to toggle source
# File lib/rabbit_feed/event.rb, line 12
def initialize(metadata, payload = {}, schema = nil, sensitive_fields = [])
  @schema   = schema
  @payload  = payload.with_indifferent_access if payload
  @metadata = metadata.with_indifferent_access if metadata
  @sensitive_fields = Array(sensitive_fields).map(&:to_s).flatten
  validate!
end

Public Instance Methods

application() click to toggle source
# File lib/rabbit_feed/event.rb, line 30
def application
  metadata[:application]
end
created_at_utc() click to toggle source
# File lib/rabbit_feed/event.rb, line 38
def created_at_utc
  (Time.iso8601 metadata[:created_at_utc]) if metadata[:created_at_utc].present?
end
name() click to toggle source
# File lib/rabbit_feed/event.rb, line 34
def name
  metadata[:name]
end
serialize() click to toggle source
# File lib/rabbit_feed/event.rb, line 20
def serialize
  buffer = StringIO.new
  writer = Avro::DataFile::Writer.new buffer, (Avro::IO::DatumWriter.new schema), schema
  writer << { 'metadata' => metadata, 'payload' => payload }
  writer.close
  buffer.string
rescue Avro::IO::AvroTypeError
  raise Avro::IO::AvroTypeError.new(schema, sensitive_proof_payload)
end

Private Instance Methods

required_metadata() click to toggle source
# File lib/rabbit_feed/event.rb, line 67
def required_metadata
  return unless metadata
  errors.add(:metadata, 'name field is required') if metadata[:name].blank?
end
sensitive_proof_payload() click to toggle source
# File lib/rabbit_feed/event.rb, line 57
def sensitive_proof_payload
  sensitive_fields.each_with_object(payload.dup) do |field, clean_payload|
    clean_payload[field] = '[REMOVED]' if clean_payload.key?(field)
  end
end
validate!() click to toggle source
# File lib/rabbit_feed/event.rb, line 63
def validate!
  raise Error, "Invalid event: #{errors.messages}" if invalid?
end