class RSpec::Matchers::BuiltIn::BaseMatcher
@api private
Used internally as a base class for matchers that ship with rspec-expectations and rspec-rails.
### Warning:
This class is for internal use, and subject to change without notice. We strongly recommend that you do not base your custom matchers on this class. If/when this changes, we will announce it and remove this warning.
Constants
- UNDEFINED
@api private Used to detect when no arg is passed to `initialize`. `nil` cannot be used because it's a valid value to pass.
Attributes
@private
@private
@private
Public Class Methods
# File lib/rspec/matchers/built_in/base_matcher.rb, line 26 def initialize(expected=UNDEFINED) @expected = expected unless UNDEFINED.equal?(expected) end
Public Instance Methods
@api private Generates a “pretty” description using the logic in {Pretty}. @return [String]
# File lib/rspec/matchers/built_in/base_matcher.rb, line 58 def description return name_to_sentence unless defined?(@expected) "#{name_to_sentence}#{to_sentence @expected}" end
@api private Matchers are not diffable by default. Override this to make your subclass diffable.
# File lib/rspec/matchers/built_in/base_matcher.rb, line 66 def diffable? false end
@api private
# File lib/rspec/matchers/built_in/base_matcher.rb, line 79 def expects_call_stack_jump? false end
@api private Used to wrap a block of code that will indicate failure by raising one of the named exceptions.
This is used by rspec-rails for some of its matchers that wrap rails' assertions.
# File lib/rspec/matchers/built_in/base_matcher.rb, line 45 def match_unless_raises(*exceptions) exceptions.unshift Exception if exceptions.empty? begin yield true rescue *exceptions => @rescued_exception false end end
@api private Indicates if the match is successful. Delegates to `match`, which should be defined on a subclass. Takes care of consistently initializing the `actual` attribute.
# File lib/rspec/matchers/built_in/base_matcher.rb, line 34 def matches?(actual) @actual = actual match(expected, actual) end
@api private Most matchers are value matchers (i.e. meant to work with `expect(value)`) rather than block matchers (i.e. meant to work with `expect { }`), so this defaults to false. Block matchers must override this to return true.
# File lib/rspec/matchers/built_in/base_matcher.rb, line 74 def supports_block_expectations? false end
Private Instance Methods
# File lib/rspec/matchers/built_in/base_matcher.rb, line 85 def assert_ivars(*expected_ivars) return unless (expected_ivars - present_ivars).any? raise "#{self.class.name} needs to supply#{to_sentence expected_ivars}" end
# File lib/rspec/matchers/built_in/base_matcher.rb, line 91 def present_ivars instance_variables.map { |v| v.to_sym } end