lib/rabbit_feed/event.rb in rabbit_feed-2.1.1 vs lib/rabbit_feed/event.rb in rabbit_feed-2.1.2
- old
+ new
@@ -2,28 +2,31 @@
class Event
include ActiveModel::Validations
SCHEMA_VERSION = '2.0.0'
- attr_reader :schema, :payload, :metadata
+ attr_reader :schema, :payload, :metadata, :sensitive_fields
validates :metadata, presence: true
validates :payload, length: { minimum: 0, allow_nil: false, message: 'can\'t be nil' }
validate :required_metadata
- def initialize metadata, payload={}, schema=nil
+ 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
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
def application
metadata[:application]
end
@@ -67,9 +70,15 @@
new metadata, metadata_and_payload, schema
end
end
private
+
+ 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
def validate!
raise Error.new "Invalid event: #{errors.messages}" if invalid?
end