From 2c7d897889e46465f0e01fe62d4c5a1195d7ced4 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Thu, 12 Jul 2018 18:02:09 +0200 Subject: [PATCH] Allow to set a registered encoder in a Flow by name --- lib/rackstash/flow.rb | 4 ++-- spec/rackstash/flow_spec.rb | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/rackstash/flow.rb b/lib/rackstash/flow.rb index b5b3611..56a4a8c 100644 --- a/lib/rackstash/flow.rb +++ b/lib/rackstash/flow.rb @@ -188,6 +188,7 @@ module Rackstash def encoder(encoder = nil) return @encoder if encoder.nil? self.encoder = encoder + @encoder end # Set the encoder for the log {#adapter}. You can use any object which @@ -198,8 +199,7 @@ module Rackstash # method # @return [#encode] the new `encoder` def encoder=(encoder) - raise TypeError, 'must provide an encoder' unless encoder.respond_to?(:encode) - @encoder = encoder + @encoder = Rackstash::Encoder.build(encoder) end # Get or set a separate {Flow} which is used by this flow to write details diff --git a/spec/rackstash/flow_spec.rb b/spec/rackstash/flow_spec.rb index 5aca13b..8235d1d 100644 --- a/spec/rackstash/flow_spec.rb +++ b/spec/rackstash/flow_spec.rb @@ -221,8 +221,15 @@ RSpec.describe Rackstash::Flow do expect(flow.encoder).to equal encoder end + it 'sets an encoder from a spec' do + flow.encoder = :raw + expect(flow.encoder).to be_a Rackstash::Encoder::Raw + end + it 'rejects invalid encoders' do - expect { flow.encoder = :foo }.to raise_error TypeError + # No registered encoder found + expect { flow.encoder = :invalid }.to raise_error KeyError + expect { flow.encoder = 23 }.to raise_error TypeError expect { flow.encoder = true }.to raise_error TypeError expect { flow.encoder = false }.to raise_error TypeError