class Grasshopper::Mock

Constants

MessageHeard

Public Class Methods

any_params() click to toggle source
# File lib/grasshopper/mock.rb, line 57
def self.any_params
  Grasshopper::Mock::AnyParams.new
end
new() click to toggle source
# File lib/grasshopper/mock.rb, line 3
def initialize
  @verify_next = false
end
verify(mock) click to toggle source
# File lib/grasshopper/mock.rb, line 51
def self.verify mock
  raise "Tried to verify a #{mock.class}" unless mock.is_a? Grasshopper::Mock
  mock.verify_next
  mock
end

Public Instance Methods

method_missing(message, *args, &block) click to toggle source
# File lib/grasshopper/mock.rb, line 11
def method_missing(message, *args, &block)
  request = MessageHeard.new(message, args)

  @requests ||= []
  if @verify_next
    if args.first.is_a? AnyParams
      index = @requests.index { |heard| request.message == heard.message }
    else
      index = @requests.index { |heard| request == heard }
    end
    if index.nil?
      raise not_seen_exception(request)
    end
    @requests.delete_at(index || @requests.length)
  else
    record_request(request)
  end
  nil
end
not_seen_exception(request) click to toggle source
# File lib/grasshopper/mock.rb, line 31
def not_seen_exception(request)
  NotSeen.new("Should have seen an invocation of #{request})\n\nMessages Seen:\n#{@requests.map(&:to_s).join("\n")}")
end
record_request(request) click to toggle source
# File lib/grasshopper/mock.rb, line 35
def record_request(request)
  @requests << request
end
verify_next() click to toggle source
# File lib/grasshopper/mock.rb, line 7
def verify_next
  @verify_next = true
end
verify_responds_to_heard_messages(instance) click to toggle source
# File lib/grasshopper/mock.rb, line 39
def verify_responds_to_heard_messages(instance)
  @requests.each do |request|
    raise NotImplemented.new(request) unless instance.respond_to?(request.message)
  end
end