README.md in assert-2.18.0 vs README.md in assert-2.18.1
- old
+ new
@@ -69,61 +69,89 @@
* complains if you stub a method that the object doesn't respond to
* complains if you stub with an arity mismatch
* no methods are added to `Object` to support stubbing
* stubs are auto-unstubbed on test teardown
-**Note**: Assert's stubbing logic has been extracted into a separate gem: [MuchStub](https://github.com/redding/much-stub/#muchstub). However, the main `Assert.{stub|unstub|stub_send|etc}` api is still available (it just proxies MuchStub now).
+**Note**: Assert's stubbing logic has been extracted into a separate gem: [MuchStub](https://github.com/redding/much-stub/#muchstub). However, the main `Assert.{stub|unstub|stub_send|stub_tap|etc}` api is still available (it just proxies to MuchStub now).
```ruby
myclass = Class.new do
- def mymeth; "meth"; end
- def myval(val); val; end
+ def my_method
+ "my_method"
+ end
+
+ def my_value(value)
+ value
+ end
end
-myobj = myclass.new
+my_object = myclass.new
-myobj.mymeth
- # => "meth"
-myobj.myval(123)
+my_object.my_method
+ # => "my_method"
+my_object.my_value(123)
# => 123
-myobj.myval(456)
+my_object.my_value(456)
# => 456
-Assert.stub(myobj, :mymeth)
-myobj.mymeth
- # => StubError: `mymeth` not stubbed.
-Assert.stub(myobj, :mymeth){ "stub-meth" }
-myobj.mymeth
+Assert.stub(my_object, :my_method)
+my_object.my_method
+ # => StubError: `my_method` not stubbed.
+Assert.stub(my_object, :my_method){ "stub-meth" }
+my_object.my_method
# => "stub-meth"
-myobj.mymeth(123)
+my_object.my_method(123)
# => StubError: arity mismatch
-Assert.stub(myobj, :mymeth).with(123){ "stub-meth" }
+Assert.stub(my_object, :my_method).with(123){ "stub-meth" }
# => StubError: arity mismatch
-Assert.stub_send(myobj, :mymeth) # call to the original method post-stub
- # => "meth"
-Assert.stub(myobj, :myval){ "stub-meth" }
+# Call the original method after it has been stubbed.
+Assert.stub_send(my_object, :my_method)
+ # => "my_method"
+
+Assert.stub(my_object, :my_value){ "stub-meth" }
# => StubError: arity mismatch
-Assert.stub(myobj, :myval).with(123){ |val| val.to_s }
-myobj.myval
+Assert.stub(my_object, :my_value).with(123){ |val| val.to_s }
+my_object.my_value
# => StubError: arity mismatch
-myobj.myval(123)
+my_object.my_value(123)
# => "123"
-myobj.myval(456)
- # => StubError: `myval(456)` not stubbed.
-Assert.stub_send(myobj, :myval, 123) # call to the original method post-stub
+my_object.my_value(456)
+ # => StubError: `my_value(456)` not stubbed.
+
+# Call the original method after it has been stubbed.
+Assert.stub_send(my_object, :my_value, 123)
# => 123
-Assert.stub_send(myobj, :myval, 456)
+Assert.stub_send(my_object, :my_value, 456)
# => 456
-Assert.unstub(myobj, :mymeth)
-Assert.unstub(myobj, :myval)
+# Stub a method while preserving its behavior and return value.
+my_value_called_with = nil
+Assert.stub_tap(my_object, :my_value) { |value, *args|
+ my_value_called_with = args
+ Assert.stub(value, :to_s) { "FIREWORKS!" }
+}
+value = my_object.my_value(123)
+ # => 123
+my_value_called_with
+ # => [123]
+value.to_s
+ # =>"FIREWORKS!"
-myobj.mymeth
- # => "meth"
-myobj.myval(123)
+# Unstub individual stubs
+Assert.unstub(my_object, :my_method)
+Assert.unstub(my_object, :my_value)
+
+# OR blanket unstub all stubs
+Assert.unstub!
+
+my_object.my_method
+ # => "my_method"
+my_object.my_value(123)
# => 123
-myobj.myval(456)
+value = my_object.my_value(456)
# => 456
+value.to_s
+ # => "456"
```
## Factory
```ruby