I was reading up on RSpec and I was trying to figure out how RSpec's "should" was implemented.
Could someone give a hand on how the meta nature of this function works?
The code is located here:
http://github.com/dchelimsky/rspec/blob/master/lib/spec/expectations/extensions/kernel.rb
TIA,
-daniel
Clarification:
target.should == 5
How did target's value get passed along to "should", which in turn was "=="'d against 5?
Take a look at class OperatorMatcher.
It all boils down to Ruby allowing you to leave out periods and parenthesis. What you are really writing is:
That is, send the message
should
to the objecttarget
, then send the message==
to whatevershould
returns.The method
should
is monkey patched intoKernel
, so it can be received by any object. TheMatcher
returned byshould
holds theactual
which in this case istarget
.The
Matcher
implements the method==
which does the comparison with theexpected
which, in this case, is the number 5. A cut down example that you can try yourself: