From 8232d139f456b76c16dff61aa5140eaeadc93e2f Mon Sep 17 00:00:00 2001 From: Holger Just Date: Thu, 16 Feb 2017 00:37:16 +0100 Subject: [PATCH] Add specs for handling of nested procs inside arrays with fields --- .../fields/abstract_collection_spec.rb | 21 +++++++++++++++++++ spec/rackstash/fields/array_spec.rb | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/spec/rackstash/fields/abstract_collection_spec.rb b/spec/rackstash/fields/abstract_collection_spec.rb index 0ccd0b0..93786ca 100644 --- a/spec/rackstash/fields/abstract_collection_spec.rb +++ b/spec/rackstash/fields/abstract_collection_spec.rb @@ -309,6 +309,27 @@ describe Rackstash::Fields::AbstractCollection do expect(normalize(array, scope: scope)[1][1]).to eql scope end end + + it 'resolves a proc returning an array' do + expect(normalize(-> { ['foo'] })).to be_instance_of Rackstash::Fields::Array + expect(normalize(-> { ['foo'] })).to contain_exactly 'foo' + end + + it 'resolves nested procs' do + expect(normalize(-> { [-> { 'foo' } ] })).to be_instance_of Rackstash::Fields::Array + expect(normalize(-> { [-> { 'foo' } ] })).to contain_exactly 'foo' + end + + + it 'returns a raw array returned from a proc with wrap: false' do + expect(normalize(-> { ['foo'] }, wrap: false )).to be_a ::Array + expect(normalize(-> { ['foo'] }, wrap: false)).to eql ['foo'] + end + + it 'returns a raw array returned from a nested proc with wrap: false' do + expect(normalize(-> { [-> { 'foo' }] }, wrap: false )).to be_a ::Array + expect(normalize(-> { [-> { 'foo' }] }, wrap: false)).to eql ['foo'] + end end it 'wraps an Enumerator in a Rackstash::Fields::Array' do diff --git a/spec/rackstash/fields/array_spec.rb b/spec/rackstash/fields/array_spec.rb index 1337576..4a705a3 100644 --- a/spec/rackstash/fields/array_spec.rb +++ b/spec/rackstash/fields/array_spec.rb @@ -139,6 +139,10 @@ describe Rackstash::Fields::Array do expect { array.concat(false) }.to raise_error TypeError expect { array.concat(nil) }.to raise_error TypeError end + + it 'resolves nested procs' do + expect(array.concat(-> { [-> { :foo } ] } )).to contain_exactly 'foo' + end end describe '#empty?' do