Sha256: 037054210d260c2623dddd1e07cfbb8fbba299ba23feff445d7cc3b22f5af24e

Contents?: true

Size: 955 Bytes

Versions: 1

Compression:

Stored size: 955 Bytes

Contents

# RSpec matcher to spec delegations.

RSpec::Matchers.define :delegate do |method|
  match do |object|
    @method = method
    @via ||= method
    @object = object

    if !@object.respond_to?(@to)
      raise "#{@object} does not respond to ##{@to}!"
    end
    if defined?(RR)
      receiver = Object.new
      mock(@object, @to).returns(receiver)
      mock(receiver, @via).returns(:called)
    else
      @object.stub(@to).and_return double('receiver')
      @object.send(@to).stub(@via).and_return :called
    end
    @object.send(@method) == :called
  end

  description do
    "delegate ##{@method} to ##{@to}##{@via}"
  end

  failure_message_for_should do |text|
    "expected #{@object} to delegate ##{@method} to ##{@to}##{@via}"
  end

  failure_message_for_should_not do |text|
    "expected #{@object} not to delegate ##{@method} to ##{@to}##{@via}"
  end

  chain(:to) { |receiver| @to = receiver }
  chain(:via) { |via| @via = via }

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ndlib-on-rspec-0.0.4 lib/ndlib-on-rspec/delegate_matcher.rb