From a3f16b42cd9a5d63354050ee7f8aa355c351dd3a Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 18 Jul 2018 12:33:10 +0200 Subject: [PATCH] Add attribute reader for tagged fields to Encoder::Message --- lib/rackstash/encoder/message.rb | 8 ++++++-- spec/rackstash/encoder/message_spec.rb | 9 ++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/rackstash/encoder/message.rb b/lib/rackstash/encoder/message.rb index 35e3b32..bf1731d 100644 --- a/lib/rackstash/encoder/message.rb +++ b/lib/rackstash/encoder/message.rb @@ -10,6 +10,7 @@ require 'time' require 'rackstash/encoder' require 'rackstash/encoder/helper/message' +require 'rackstash/helpers/utf8' module Rackstash module Encoder @@ -33,13 +34,16 @@ module Rackstash # encoder.encode(event) # # Logs "[foo,123] [127.0.0.1] Hello\n[foo,123] [127.0.0.1] World\n" class Message + include Rackstash::Helpers::UTF8 include Rackstash::Encoder::Helper::Message include Rackstash::Encoder::Helper::Timestamp + attr_reader :tagged + # @param tagged [Array<#to_s>] An array of field names whose values are # added in front of each message line on {#encode} def initialize(tagged: []) - @tagged_fields = Array(tagged).map(&:to_s) + @tagged = Array(tagged).map { |tag| utf8_encode(tag) }.freeze end # Return the formatted message of the given event. @@ -52,7 +56,7 @@ module Rackstash message = normalized_message(message) unless message.empty? - tags = @tagged_fields.map { |key| format_tag event[key] }.join + tags = @tagged.map { |key| format_tag event[key] }.join message = message.gsub(/^/) { tags } unless tags.empty? end diff --git a/spec/rackstash/encoder/message_spec.rb b/spec/rackstash/encoder/message_spec.rb index db1242d..955f8ae 100644 --- a/spec/rackstash/encoder/message_spec.rb +++ b/spec/rackstash/encoder/message_spec.rb @@ -30,9 +30,16 @@ RSpec.describe Rackstash::Encoder::Message do expect(encoder.encode(event)).to eql '' end - context 'with prefix_fields' do + context 'with tagged fields' do let(:tagged) { [:sym, 'field', 'tags'] } + it 'returns field names' do + expect(encoder.tagged) + .to be_frozen + .and all(be_instance_of String) + .and all(be_frozen) + end + it 'adds fields to all lines' do event = { 'message' => ["line1\t\n", "line2\nline3\n\t\n"], 'field' => 'BXC' } expect(encoder.encode(event))