Sha256: ec586d486cec1fa6b6fb77f439494a3a226122e14ff5a1dd3cea6aef09052845

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

require 'assay/assertion'

module Assay

  # Does an object #respond_to? a method call.
  class ResponseFailure < Assertion

    def self.assertion_name
      :respond_to
    end

    def self.assertion_name!
      :not_respond_to
    end

    def self.operator_name
      :respond_to?
    end

    # Check assertion.
    def self.pass?(reciever, method)
      #flip = (Symbol === obj) && ! (Symbol === meth) # HACK for specs
      #obj, meth = meth, obj if flip
      reciever.respond_to?(method)
    end

    #
    def to_s
      return @mesg if @mesg
      return super unless @arguments.size == 2

      reciever = @arguments[0].inspect
      method   = @arguments[1].inspect

      if @_negated
        "Expected #{reciever} (#{reciever.class}) to NOT respond to ##{method}"
      else
        "Expected #{reciever} (#{reciever.class}) to respond to ##{method}"
      end
    end

  end


  module Assertives
    # Passes if +object+ respond_to? +methods+.
    #
    #   assert_respond_to 'bugbear', :slice
    #
    def assert_respond_to(reciever, method, msg=nil)
      ResponseFailure.assert(reciever, method, :message=>msg, :backtrace=>caller)
    end
    alias_method :assert_responds_to, :assert_respond_to

    # Passes if +object+ does not respond_to? +methods+.
    #
    #   assert_not_respond_to 'bugbear', :slice
    #
    def assert_not_respond_to(reciever, method, msg=nil)
      ResponseFailure.refute(reciever, method, :message=>msg, :backtrace=>caller)
    end

    alias_method :assert_not_responds_to, :assert_not_respond_to
  end


  module Matchers
    #
    #
    #   object.assert is_responsive_to(:method_symbol)
    #
    def is_responsive_to(method)
      ResponseFailure.to_matcher(method)
    end

    #
    #
    #   object.should be_responsive_to(:method_symbol)
    #
    def be_responsive_to(method)
      ResponseFailure.to_matcher(method)
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
assay-0.3.0 lib/assay/assertions/response_failure.rb