# Snippet - assert\_yin\_yang

**URL:** <https://www.ruby-forum.com/t/snippet-assert-yin-yang/119761>\
**Category:** Ruby\
**Created:** [November 10, 2007, 4:55am UTC](https://www.ruby-forum.com/t/snippet-assert-yin-yang/119761 "2007-11-10T04:55:43Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Phlip](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/ed8c4c/32.png) [@Phlip](https://www.ruby-forum.com/u/Phlip)\
**Post date:** [November 10, 2007, 4:55am UTC](https://www.ruby-forum.com/t/snippet-assert-yin-yang/119761/1 "2007-11-10T04:55:43Z")

</div>

Rubies:

This is a Rails assertion, but any project could use its concept.

It asserts that a Model value is one state before a block, and another  
state after:

def assert\_yin\_yang(object, method, yin, yang, diagnostic = nil)  
message = build\_message(diagnostic, “\<?\>#\<?\>”, object, method)  
assert\_equal yin, object.send(method), message  
yield  
object.reload  
assert\_equal yang, object.send(method), message  
end

Detect something switched from false to true like this:

```
 helmet = shrew.accessories.first

 assert_yin_yang helmet, :active, false, true do
   post :use, :id => helmet.id
 end

```

Any tips welcome regarding making this more yin-yang-ey!
