class RSpec::Contracts::MethodProxy

Public Class Methods

create(*args) click to toggle source
# File lib/rspec/contracts/method_proxy.rb, line 8
def self.create(*args)
  new(*args)
end
new(implementor, proxied_class, method_name) click to toggle source
# File lib/rspec/contracts/method_proxy.rb, line 18
def initialize(implementor, proxied_class, method_name)
  @implementor = implementor
  @proxied_class = proxied_class
  @method_name = method_name
  install
end

Public Instance Methods

add_message(arguments) click to toggle source
# File lib/rspec/contracts/method_proxy.rb, line 12
def add_message(arguments)
  MessageGroup.new @implementor, @method_name, arguments
end

Private Instance Methods

install() click to toggle source
# File lib/rspec/contracts/method_proxy.rb, line 25
def install
  original_method = @proxied_class.instance_method @method_name
  method_proxy = self
  @proxied_class.send :define_method, @method_name do |*args|
    message_group = method_proxy.add_message args
    return_value = original_method.bind(self).call(*args) do |*values|
      message_group.add_response YieldedResponse.new(*values)
    end
    message_group.add_response ReturnedResponse.new(return_value)
    return_value
  end
end