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