Class: RSpec::Matchers::DSL::Matcher
- Inherits:
- 
      Object
        - Object
- RSpec::Matchers::DSL::Matcher
 
- Extended by:
- Macros, RSpec::Matchers::DSL::Macros::Deprecated
- Includes:
- RSpec::Matchers, Composable, DefaultImplementations, Pretty
- Defined in:
- lib/rspec/matchers/dsl.rb
Overview
The class used for custom matchers. The block passed to
RSpec::Matchers.define will be evaluated in the context
of the singleton class of an instance, and will have the
Macros methods available.
Constant Summary
Instance Attribute Summary (collapse)
- 
  
      - (Object) actual 
  
      readonly
    Exposes the value being matched against -- generally the object object wrapped by expect.
- 
  
      - (Object) block_arg 
  
      readonly
    The block parameter used in the expectation. 
- 
  
      - (Object) expected_as_array 
  
      readonly
    Returns the expected value as an an array. 
- 
  
      - (Object) rescued_exception 
  
      readonly
    Exposes the exception raised during the matching by match_unless_raises.
Instance Method Summary (collapse)
- 
  
      - (Object) expected 
  
    Provides the expected value. 
- 
  
      - (Matcher) initialize(name, declarations, matcher_execution_context, *expected, &block_arg) 
  
    constructor
  private
    A new instance of Matcher. 
- 
  
      - (Object) inspect 
  
    Adds the name (rather than a cryptic hex number) so we can identify an instance of the matcher in error messages (e.g. for NoMethodError).
- 
  
      - (Boolean) respond_to?(method, include_private = false) 
  
    Indicates that this matcher responds to messages from the @matcher_execution_contextas well.
- 
  
      - (Boolean) respond_to_missing?(method, include_private = false) 
  
    Indicates that this matcher responds to messages from the @matcher_execution_contextas well.
Methods included from RSpec::Matchers::DSL::Macros::Deprecated
failure_message_for_should, failure_message_for_should_not, match_for_should, match_for_should_not
Methods included from Macros
chain, description, diffable, failure_message, failure_message_when_negated, match, match_unless_raises, match_when_negated, supports_block_expectations
Methods included from Composable
#===, #and, #description_of, enumerable?, #or, surface_descriptions_in, #values_match?
Methods included from Pretty
#name, split_words, #to_sentence, #to_word
Methods included from RSpec::Matchers
alias_matcher, #all, #be, #be_a, #be_a_kind_of, #be_an_instance_of, #be_between, #be_falsey, #be_nil, #be_truthy, #be_within, #change, clear_generated_description, configuration, #contain_exactly, #cover, define_negated_matcher, #end_with, #eq, #eql, #equal, #exist, #expect, generated_description, #have_attributes, #include, #match, #match_array, #output, #raise_error, #respond_to, #satisfy, #start_with, #throw_symbol, #yield_control, #yield_successive_args, #yield_with_args, #yield_with_no_args
Methods included from DefaultImplementations
#description, #diffable?, #expects_call_stack_jump?, #supports_block_expectations?
Methods included from BuiltIn::BaseMatcher::DefaultFailureMessages
#failure_message, #failure_message_when_negated
Constructor Details
- (Matcher) initialize(name, declarations, matcher_execution_context, *expected, &block_arg)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Matcher
| 361 362 363 364 365 366 367 368 369 370 371 372 373 374 | # File 'lib/rspec/matchers/dsl.rb', line 361 def initialize(name, declarations, matcher_execution_context, *expected, &block_arg) @name = name @actual = nil @expected_as_array = expected @matcher_execution_context = matcher_execution_context @chained_method_clauses = [] @block_arg = block_arg class << self # See `Macros#define_user_override` above, for an explanation. include(@user_method_defs = Module.new) self end.class_exec(*expected, &declarations) end | 
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
- (Object) method_missing(method, *args, &block) (private)
Takes care of forwarding unhandled messages to the
@matcher_execution_context (typically the current
running RSpec::Core::Example). This is needed by
rspec-rails so that it can define matchers that wrap
Rails' test helper methods, but it's also a useful
feature in its own right.
| 428 429 430 431 432 433 434 | # File 'lib/rspec/matchers/dsl.rb', line 428 def method_missing(method, *args, &block) if @matcher_execution_context.respond_to?(method) @matcher_execution_context.__send__ method, *args, &block else super(method, *args, &block) end end | 
Instance Attribute Details
- (Object) actual (readonly)
Exposes the value being matched against -- generally the object
object wrapped by expect.
| 351 352 353 | # File 'lib/rspec/matchers/dsl.rb', line 351 def actual @actual end | 
- (Object) block_arg (readonly)
The block parameter used in the expectation
| 358 359 360 | # File 'lib/rspec/matchers/dsl.rb', line 358 def block_arg @block_arg end | 
- (Object) expected_as_array (readonly)
Returns the expected value as an an array. This exists primarily
to aid in upgrading from RSpec 2.x, since in RSpec 2, expected
always returned an array.
| 392 393 394 | # File 'lib/rspec/matchers/dsl.rb', line 392 def expected_as_array @expected_as_array end | 
- (Object) rescued_exception (readonly)
Exposes the exception raised during the matching by match_unless_raises.
Could be useful to extract details for a failure message.
| 355 356 357 | # File 'lib/rspec/matchers/dsl.rb', line 355 def rescued_exception @rescued_exception end | 
Instance Method Details
- (Object) expected
Provides the expected value. This will return an array if multiple arguments were passed to the matcher; otherwise it will return a single value.
| 380 381 382 383 384 385 386 | # File 'lib/rspec/matchers/dsl.rb', line 380 def expected if expected_as_array.size == 1 expected_as_array[0] else expected_as_array end end | 
- (Object) inspect
Adds the name (rather than a cryptic hex number)
so we can identify an instance of
the matcher in error messages (e.g. for NoMethodError)
| 397 398 399 | # File 'lib/rspec/matchers/dsl.rb', line 397 def inspect "#<#{self.class.name} #{name}>" end | 
- (Boolean) respond_to?(method, include_private = false)
Indicates that this matcher responds to messages
from the @matcher_execution_context as well.
| 411 412 413 | # File 'lib/rspec/matchers/dsl.rb', line 411 def respond_to?(method, include_private=false) super || @matcher_execution_context.respond_to?(method, include_private) end | 
- (Boolean) respond_to_missing?(method, include_private = false)
Indicates that this matcher responds to messages
from the @matcher_execution_context as well.
Also, supports getting a method object for such methods.
| 405 406 407 | # File 'lib/rspec/matchers/dsl.rb', line 405 def respond_to_missing?(method, include_private=false) super || @matcher_execution_context.respond_to?(method, include_private) end |