This is some pretty horrible meta-programming right here.  That API is ... well, kind of ugly, to be honest.

Can't we replace this with either a mixin on the rspec object, or something else that doesn't involve passing `self` to arbitrary other code, along with piles and piles of other metadata?