Skip to content

Instantly share code, notes, and snippets.

@txus
Created February 2, 2011 09:19
Show Gist options
  • Save txus/807456 to your computer and use it in GitHub Desktop.
Save txus/807456 to your computer and use it in GitHub Desktop.
RSpec matcher for delegations
# 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
@nelantone
Copy link

Hahah! @txus ! Te veo hasta en la sopa :).

@hrieke
Copy link

hrieke commented May 20, 2020

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.

@julienbourdeau
Copy link

I'm using this for now but thanks for the original work 👏 ❤️

➡️ https://gist.github.com/purp/fe5f79e878b609560724d6b03242a5df

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment