Sha256: a81fbd9fdbd2fd0940cc30d73905b8d2cf4ffbe8886d3dd58b363b7e63ee13f1

Contents?: true

Size: 1.08 KB

Versions: 6

Compression:

Stored size: 1.08 KB

Contents

module Bogus
  class VerifiesStubDefinition
    extend Takes

    takes :method_stringifier

    def verify!(object, method_name, args)
      stubbing_non_existent_method!(object, method_name) unless object.respond_to?(method_name)
      return unless object.methods.include?(method_name)
      return if WithArguments.with_matcher?(args)
      method = object.method(method_name)
      verify_call!(method, args)
    end

    private

    def verify_call!(method, args)
      object = Object.new
      fake_method = method_stringifier.stringify(method, "")
      object.instance_eval(fake_method)
      object.send(method.name, *args)
    rescue ArgumentError
      wrong_arguments!(method, args)
    end

    def wrong_arguments!(method, args)
      args_string = method_stringifier.arguments_as_string(method.parameters)
      raise ArgumentError, "tried to stub #{method.name}(#{args_string}) with arguments: #{args.map(&:inspect).join(",")}"
    end

    def stubbing_non_existent_method!(object, method_name)
      raise NameError, "#{object.inspect} does not respond to #{method_name}"
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
bogus-0.1.6 lib/bogus/stubbing/verifies_stub_definition.rb
bogus-0.1.5 lib/bogus/stubbing/verifies_stub_definition.rb
bogus-0.1.4 lib/bogus/stubbing/verifies_stub_definition.rb
bogus-0.1.3 lib/bogus/verifies_stub_definition.rb
bogus-0.1.2 lib/bogus/verifies_stub_definition.rb
bogus-0.1.1 lib/bogus/verifies_stub_definition.rb