Module: RSpec::Matchers::DSL
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Classes:
| |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Defined in: | rspec-expectations/lib/rspec/matchers/dsl.rb |
Overview
Defines the custom matcher DSL
.
Instance Method Summary
-
#alias_matcher(new_name, old_name, options = {}) {|String| ... }
Defines a matcher alias.
-
#define(name) {|Object| ... }
(also: #matcher)
Defines a custom matcher.
-
#define_negated_matcher(negated_name, base_name) {|String| ... }
Defines a negated matcher.
-
#matcher(name, &declarations)
Alias for #define.
-
#warn_about_block_args
private
:nocov:
Instance Method Details
#alias_matcher(new_name, old_name, options = {}) {|String| ... }
Defines a matcher alias. The returned matcher’s ‘description` will be overridden to reflect the phrasing of the new name, which will be used in failure messages when passed as an argument to another matcher in a composed matcher expression.
# File 'rspec-expectations/lib/rspec/matchers/dsl.rb', line 32
def alias_matcher(new_name, old_name, ={}, &description_override) description_override ||= lambda do |old_desc| old_desc.gsub(EnglishPhrasing.split_words(old_name), EnglishPhrasing.split_words(new_name)) end klass = .fetch(:klass) { AliasedMatcher } define_method(new_name) do |*args, &block| matcher = __send__(old_name, *args, &block) matcher.matcher_name = new_name if matcher.respond_to?(:matcher_name=) klass.new(matcher, description_override) end ruby2_keywords new_name if respond_to?(:ruby2_keywords, true) end
#define(name) {|Object| ... } Also known as: #matcher
Defines a custom matcher.
# File 'rspec-expectations/lib/rspec/matchers/dsl.rb', line 73
def define(name, &declarations) warn_about_block_args(name, declarations) define_method name do |*expected, &block_arg| RSpec::Matchers::DSL::Matcher.new(name, declarations, self, *expected, &block_arg) end end
#define_negated_matcher(negated_name, base_name) {|String| ... }
Defines a negated matcher. The returned matcher’s ‘description` and failure_message
will be overridden to reflect the phrasing of the new name, and the match logic will be based on the original matcher but negated.
# File 'rspec-expectations/lib/rspec/matchers/dsl.rb', line 61
def define_negated_matcher(negated_name, base_name, &description_override) alias_matcher(negated_name, base_name, :klass => AliasedNegatedMatcher, &description_override) end
#matcher(name, &declarations)
Alias for #define.
# File 'rspec-expectations/lib/rspec/matchers/dsl.rb', line 79
alias_method :matcher, :define
#warn_about_block_args (private)
:nocov:
# File 'rspec-expectations/lib/rspec/matchers/dsl.rb', line 94
def warn_about_block_args(name, declarations) declarations.parameters.each do |type, arg_name| next unless type == :block RSpec.warning("Your `#{name}` custom matcher receives a block argument (`#{arg_name}`), " \ "but due to limitations in ruby, RSpec cannot provide the block. Instead, " \ "use the `block_arg` method to access the block") end end