Sha256: 570d22712ee92f4f3fb43cbedf3efa2e601dbca4670a339290dbfc10872c4e88

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

require 'rspec/expectations'

module VerifiedDouble
  module Matchers
    extend RSpec::Matchers::DSL

    matcher :verify_accessor_contract do |expected|
      match do |actual|
        method_signature = ParseMethodSignature.new(expected).execute

        VerifiedDouble.verified_signatures_from_matchers << method_signature

        raise CannotHandleMultipleReturnValues if method_signature.return_values.size > 1

        value = method_signature.return_values.first.as_instance
        actual.send "#{method_signature.method}=", value
        actual.send(method_signature.method) == value
      end
    end

    matcher :verify_reader_contract do |expected|
      match do |actual|
        method_signature = ParseMethodSignature.new(expected).execute

        VerifiedDouble.verified_signatures_from_matchers << method_signature

        raise CannotHandleMultipleReturnValues if method_signature.return_values.size > 1

        actual.send(method_signature.method).is_a?(method_signature.return_values.first.value)
      end
    end

    class CannotHandleMultipleReturnValues < Exception; end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
verified_double-0.1.1 lib/verified_double/matchers.rb
verified_double-0.1.0 lib/verified_double/matchers.rb