mirror of
https://github.com/meineerde/rackstash.git
synced 2026-02-01 01:37:12 +00:00
Preserve existing field mappings for encoder fields
This commit is contained in:
parent
3167574607
commit
d510280532
@ -18,19 +18,29 @@ module Rackstash
|
||||
private
|
||||
|
||||
def set_fields_mapping(fields, default = {})
|
||||
@fields_map = default.dup
|
||||
Hash(fields).each_pair do |key, value|
|
||||
@fields_map[key.to_sym] = utf8_encode(value)
|
||||
@fields_map ||= {}
|
||||
default.each do |key, value|
|
||||
if fields.key?(key)
|
||||
@fields_map[key] = utf8_encode(fields[key])
|
||||
else
|
||||
# Preserve existing mappings which might have been set by a
|
||||
# previous call to {#set_fields_mapping}
|
||||
@fields_map[key] ||= utf8_encode(value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def extract_field(name, event)
|
||||
field_name = @fields_map[name]
|
||||
field_name = field(name)
|
||||
|
||||
field = event.delete(field_name) if field_name
|
||||
field = yield(field_name) if field.nil? && block_given?
|
||||
field
|
||||
end
|
||||
|
||||
def field(name)
|
||||
@fields_map[name]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -26,6 +26,44 @@ RSpec.describe Rackstash::Encoder::Helper::FieldsMap do
|
||||
}
|
||||
}
|
||||
|
||||
describe '#set_fields_mapping' do
|
||||
it 'sets a default mapping' do
|
||||
helper.set_fields_mapping({}, { field: 'default' })
|
||||
expect(helper.field(:field)).to eql 'default'
|
||||
end
|
||||
|
||||
it 'sets default fields as strings' do
|
||||
helper.set_fields_mapping({}, { number: 123 })
|
||||
expect(helper.field(:number)).to eql '123'
|
||||
end
|
||||
|
||||
it 'sets fields as strings' do
|
||||
helper.set_fields_mapping({ number: 42 }, { number: 'something' })
|
||||
expect(helper.field(:number)).to eql '42'
|
||||
end
|
||||
|
||||
it 'overwrites fields on subsequent calls' do
|
||||
helper.set_fields_mapping({ field: 'overwritten' }, { field: 'default' })
|
||||
expect(helper.field(:field)).to eql 'overwritten'
|
||||
|
||||
helper.set_fields_mapping({ field: 'again' }, { field: 'other_default' })
|
||||
expect(helper.field(:field)).to eql 'again'
|
||||
end
|
||||
|
||||
it 'keeps existing default fields on subsequent calls' do
|
||||
helper.set_fields_mapping({}, { field: 'foo' })
|
||||
expect(helper.field(:field)).to eql 'foo'
|
||||
|
||||
helper.set_fields_mapping({}, { field: 'bar' })
|
||||
expect(helper.field(:field)).to eql 'foo'
|
||||
end
|
||||
|
||||
it 'ignores fields not defined as a default field' do
|
||||
helper.set_fields_mapping({invalid: 'invalid' }, { known: 'known' })
|
||||
expect(helper.field(:invalid)).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe '#extract_field' do
|
||||
context 'with defaults' do
|
||||
let(:defaults) { { default: 'foo' } }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user