-
-
Save txus/807456 to your computer and use it in GitHub Desktop.
| # RSpec matcher to spec delegations. | |
| # | |
| # Usage: | |
| # | |
| # describe Post do | |
| # it { should delegate(:name).to(:author).with_prefix } # post.author_name | |
| # it { should delegate(:month).to(:created_at) } | |
| # it { should delegate(:year).to(:created_at) } | |
| # end | |
| RSpec::Matchers.define :delegate do |method| | |
| match do |delegator| | |
| @method = @prefix ? :"#{@to}_#{method}" : method | |
| @delegator = delegator | |
| begin | |
| @delegator.send(@to) | |
| rescue NoMethodError | |
| raise "#{@delegator} does not respond to #{@to}!" | |
| end | |
| @delegator.stub(@to).and_return double('receiver') | |
| @delegator.send(@to).stub(method).and_return :called | |
| @delegator.send(@method) == :called | |
| end | |
| description do | |
| "delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}" | |
| end | |
| failure_message_for_should do |text| | |
| "expected #{@delegator} to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}" | |
| end | |
| failure_message_for_should_not do |text| | |
| "expected #{@delegator} not to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}" | |
| end | |
| chain(:to) { |receiver| @to = receiver } | |
| chain(:with_prefix) { @prefix = true } | |
| end |
I'm afraid it has nothing to do with the delegator... Could you provide a full backtrace and maybe also the code for your model?
Exactly what I needed – thanks! -j
Thanks!
Cool thanks!
Thanks!
Awesome! Very useful.
You should try to get this into Shoulda!
This is cool but there are three small problems with this implementation:
- It does not work in the case of delegating to instance variables, e.g.,
delegate :foo, to: :'@my_var' - Validating that the delegation target exists by using
@delegator.send(@to)is an unexpected behavior from the standpoint of the user of the matcher. If there are any side effects from that call, the test outcome could be affected. - The rescue block won't catch arity-related errors.
All three issues are fixed in my fork: https://gist.github.com/ssimeonov/5942729
This fails if the method is a setter with error:
Failure/Error: it{ should delegate(:name=).to(:sku_description)}
My fork has updated this gist to RSpec 3.3 version: https://gist.github.com/bparanj/4579700adca0b64e7ca0
Hahah! @txus ! Te veo hasta en la sopa :).
Hello,
Do you have a license that you would like to release this code under?
I spoke with Alec Winograd about his fork-of-Simeon's-fork (yep, 2 down), he's added an MIT License to his modifications.
I have also asked Simeon if he'd like to add a license to his modification, but it would be absolutely wonderful if you could assign a license to your code. [Edit] Simeon Simeonov has replied, and selected the MIT License for his modifications as well. [/Edit]
Thank you, hope all is well.
I'm using this for now but thanks for the original work 👏 ❤️
➡️ https://gist.github.com/purp/fe5f79e878b609560724d6b03242a5df
Been looking for something like this, awesome work!
However, I get this error when I try to run this matcher:
it { should delegate(:name).to(:profile)}
error:
id is required for non-singleton resources
any idea what's going?