diff --git a/lib/amq/protocol/client.rb b/lib/amq/protocol/client.rb index 9c56996..60a1c51 100644 --- a/lib/amq/protocol/client.rb +++ b/lib/amq/protocol/client.rb @@ -177,7 +177,7 @@ def self.encode_body(body, channel, frame_size) body.force_encoding("ASCII-8BIT") if RUBY_VERSION.to_f >= 1.9 array = Array.new - while body + while body && !body.empty? payload, body = body[0, limit], body[limit, body.length - limit] array << BodyFrame.new(payload, channel) end diff --git a/spec/amq/protocol/method_spec.rb b/spec/amq/protocol/method_spec.rb index d980009..a7bb645 100644 --- a/spec/amq/protocol/method_spec.rb +++ b/spec/amq/protocol/method_spec.rb @@ -34,6 +34,14 @@ module Protocol body_frames.map(&:payload).should == lipsum.split('').each_slice(expected_payload_size).map(&:join) end end + + context 'when the body fits perfectly in a single frame' do + it 'encodes a body into a single BodyFrame' do + body_frames = Method.encode_body('*' * 131064, 1, 131072) + body_frames.first.payload.should == '*' * 131064 + body_frames.should have(1).item + end + end end end end