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