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