From e532be28c3d980bfcc89b1fb5c4bbd198a3c1893 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Sun, 8 Oct 2017 13:11:11 +0200 Subject: [PATCH] Add Rackstash::Flow.encoder= as a real setter --- lib/rackstash/flow.rb | 18 +++++++++++++++--- spec/rackstash/flow_spec.rb | 19 ++++++++++++++----- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/lib/rackstash/flow.rb b/lib/rackstash/flow.rb index 793523e..479dcc4 100644 --- a/lib/rackstash/flow.rb +++ b/lib/rackstash/flow.rb @@ -78,7 +78,7 @@ module Rackstash # context of `self`. def initialize(adapter, encoder: nil, filters: [], error_flow: nil, &block) @adapter = Rackstash::Adapters[adapter] - self.encoder(encoder || @adapter.default_encoder) + self.encoder = encoder || @adapter.default_encoder @filter_chain = Rackstash::FilterChain.new(filters) if error_flow.nil? @@ -122,12 +122,24 @@ module Rackstash # # @param encoder [#encode, nil] if given, set the flow's encoder to this # object - # @raise [TypeError] if the given encoder does not respond to the `encode` + # @raise [TypeError] if the given `encoder` does not respond to the `encode` # method - # @return [#encode] the new encoder if given or the currently defined one + # @return [#encode] the newly set encoder (if given) or the currently + # defined one + # @see #encoder= def encoder(encoder = nil) return @encoder if encoder.nil? + self.encoder = encoder + end + # Set the encoder for the log {#adapter}. You can use any object which + # responds to the `encode` method. + # + # @param encoder [#encode] the encoder to use for the log {#adapter}. + # @raise [TypeError] if the given `encoder` does not respond to the `encode` + # method + # @return [#encode] the new `encoder` + def encoder=(encoder) raise TypeError, 'must provide an encoder' unless encoder.respond_to?(:encode) @encoder = encoder end diff --git a/spec/rackstash/flow_spec.rb b/spec/rackstash/flow_spec.rb index c8b328d..73552ff 100644 --- a/spec/rackstash/flow_spec.rb +++ b/spec/rackstash/flow_spec.rb @@ -123,13 +123,22 @@ describe Rackstash::Flow do # The encoder is persisted and is returned afterwards expect(flow.encoder).to equal encoder end + end + + describe '#encoder=' do + it 'sets a new encoder' do + encoder = Rackstash::Encoders::JSON.new + flow.encoder = encoder + + expect(flow.encoder).to equal encoder + end it 'rejects invalid encoders' do - expect { flow.encoder :foo }.to raise_error TypeError - expect { flow.encoder 23 }.to raise_error TypeError - expect { flow.encoder true }.to raise_error TypeError - expect { flow.encoder false }.to raise_error TypeError - expect { flow.encoder -> {} }.to raise_error TypeError + expect { flow.encoder = :foo }.to raise_error TypeError + expect { flow.encoder = 23 }.to raise_error TypeError + expect { flow.encoder = true }.to raise_error TypeError + expect { flow.encoder = false }.to raise_error TypeError + expect { flow.encoder = -> {} }.to raise_error TypeError end end