class RuboCop::Cop::RSpec::PredicateMatcher

Prefer using predicate matcher over using predicate method directly.

RSpec defines magic matchers for predicate methods. This cop recommends to use the predicate matcher instead of using predicate method directly.

@example Strict: true, EnforcedStyle: inflected (default)

# bad
expect(foo.something?).to be_truthy

# good
expect(foo).to be_something

# also good - It checks "true" strictly.
expect(foo.something?).to be(true)

@example Strict: false, EnforcedStyle: inflected

# bad
expect(foo.something?).to be_truthy
expect(foo.something?).to be(true)

# good
expect(foo).to be_something

@example Strict: true, EnforcedStyle: explicit

# bad
expect(foo).to be_something

# good - the above code is rewritten to it by this cop
expect(foo.something?).to be(true)

# bad - no autocorrect
expect(foo)
  .to be_something(<<~TEXT)
    bar
  TEXT

# good
expect(foo.something?(<<~TEXT)).to be(true)
  bar
TEXT

@example Strict: false, EnforcedStyle: explicit

# bad
expect(foo).to be_something

# good - the above code is rewritten to it by this cop
expect(foo.something?).to be_truthy

Constants

RESTRICT_ON_SEND

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/predicate_matcher.rb, line 335
def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
  check_explicit(node) if style == :explicit
end
on_send(node) click to toggle source
# File lib/rubocop/cop/rspec/predicate_matcher.rb, line 326
def on_send(node)
  case style
  when :inflected
    check_inflected(node)
  when :explicit
    check_explicit(node)
  end
end