rspec/rspec-mocks — pull request #697 by JonRowe (2014-06-05 01:46:53+00:00)
Title: Allow receive_message_chain to be constained by arguments

With the old should syntax you could constrain `stub` and `stub_chain` calls by their arguments using with, e.g.

```Ruby
describe do
let(:object) { double }

specify do
object.stub(:call).with(1) { 2 }
object.stub(:call).with(3) { 4 }
expect(object.call 1).to eq 2
expect(object.call 3).to eq 4
end

specify do
object.stub_chain(:call, :call).with(1) { 2 }
object.stub_chain(:call, :call).with(3) { 4 }
expect(object.call.call 1).to eq 2
expect(object.call.call 3).to eq 4
end
end
```

But the equivalent in the expect syntax:

```Ruby
specify do
allow(object).to receive(:call).with(1) { 2 }
allow(object).to receive(:call).with(3) { 4 }
expect(object.call 1).to eq 2
expect(object.call 3).to eq 4
end

specify do
allow(object).to receive_message_chain(:call, :call).with(1) { 2 }
allow(object).to receive_message_chain(:call, :call).with(3) { 4 }
expect(object.call.call 1).to eq 2
expect(object.call.call 3).to eq 4
end
end
```

Fails on the later `receive_messaage_chain` because we don't define `with`.

This makes that change, and supports constraining arguments on message chains. Given the simplicity of the "fix" I'm inclined to support this, WDYT @myronmarston

Fixes #696.