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
- 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) name
readonly
The name of the matcher.
-
- (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)
:nocov: Indicates that this matcher responds to messages from the
@matcher_execution_context
as well. -
- (Boolean) respond_to_missing?(method, include_private = false)
Indicates that this matcher responds to messages from the
@matcher_execution_context
as 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, #or, should_enumerate?, surface_descriptions_in, unreadable_io?, #values_match?
Methods included from RSpec::Matchers
#aggregate_failures, 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
372 373 374 375 376 377 378 379 380 381 382 383 384 385 |
# File 'lib/rspec/matchers/dsl.rb', line 372 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.
441 442 443 444 445 446 447 |
# File 'lib/rspec/matchers/dsl.rb', line 441 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
.
359 360 361 |
# File 'lib/rspec/matchers/dsl.rb', line 359 def actual @actual end |
- (Object) block_arg (readonly)
The block parameter used in the expectation
366 367 368 |
# File 'lib/rspec/matchers/dsl.rb', line 366 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.
403 404 405 |
# File 'lib/rspec/matchers/dsl.rb', line 403 def expected_as_array @expected_as_array end |
- (Object) name (readonly)
The name of the matcher.
369 370 371 |
# File 'lib/rspec/matchers/dsl.rb', line 369 def name @name 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.
363 364 365 |
# File 'lib/rspec/matchers/dsl.rb', line 363 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.
391 392 393 394 395 396 397 |
# File 'lib/rspec/matchers/dsl.rb', line 391 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
)
408 409 410 |
# File 'lib/rspec/matchers/dsl.rb', line 408 def inspect "#<#{self.class.name} #{name}>" end |
- (Boolean) respond_to?(method, include_private = false)
:nocov:
Indicates that this matcher responds to messages
from the @matcher_execution_context
as well.
423 424 425 |
# File 'lib/rspec/matchers/dsl.rb', line 423 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.
416 417 418 |
# File 'lib/rspec/matchers/dsl.rb', line 416 def respond_to_missing?(method, include_private=false) super || @matcher_execution_context.respond_to?(method, include_private) end |