diff --git a/lib/twilio-ruby/framework/serialize.rb b/lib/twilio-ruby/framework/serialize.rb index 49ac28858..4916008df 100644 --- a/lib/twilio-ruby/framework/serialize.rb +++ b/lib/twilio-ruby/framework/serialize.rb @@ -67,4 +67,13 @@ def self.prefixed_collapsible_map(map, prefix) result end + + def self.serialize_list(input_list) + return input_list unless input_list.is_a? Array + result = [] + input_list.each do |e| + result.push yield e + end + result + end end diff --git a/spec/framework/serialize_spec.rb b/spec/framework/serialize_spec.rb index 826d32aed..afa8e4db7 100644 --- a/spec/framework/serialize_spec.rb +++ b/spec/framework/serialize_spec.rb @@ -56,4 +56,25 @@ expect(actual).to eq(123) end end + + describe 'serialize_list' do + it 'should only operate on things with .each method' do + actual = Twilio.serialize_list(nil) + expect(actual).to eq(nil) + + actual = Twilio.serialize_list("something") + expect(actual).to eq("something") + + actual = Twilio.serialize_list(1) + expect(actual).to eq(1) + + actual = Twilio.serialize_list({ some_obj: 'some_val' }) + expect(actual).to eq({ some_obj: 'some_val' }) + end + + it 'should apply block to every element in list' do + actual = Twilio.serialize_list([1, 2, 3, 4]) { |e| e * 2 } + expect(actual).to eq([2, 4, 6, 8]) + end + end end