class RuboCop::RSpec::DescriptionExtractor::CodeObject

Decorator of a YARD code object for working with documented rspec cops

Constants

COP_CLASS_NAMES
RSPEC_NAMESPACE

Attributes

yardoc[R]

Public Class Methods

new(yardoc) click to toggle source
# File lib/rubocop/rspec/description_extractor.rb, line 27
def initialize(yardoc)
  @yardoc = yardoc
end

Public Instance Methods

configuration() click to toggle source

Configuration for the documented cop that would live in default.yml

@return [Hash]

# File lib/rubocop/rspec/description_extractor.rb, line 44
def configuration
  { cop_name => { 'Description' => description } }
end
rspec_cop?() click to toggle source

Test if the YARD code object documents a concrete rspec cop class

@return [Boolean]

# File lib/rubocop/rspec/description_extractor.rb, line 34
def rspec_cop?
  class_documentation? &&
    rspec_cop_namespace? &&
    cop_subclass? &&
    !abstract?
end

Private Instance Methods

abstract?() click to toggle source
# File lib/rubocop/rspec/description_extractor.rb, line 78
def abstract?
  yardoc.tags.any? { |tag| tag.tag_name.eql?('abstract') }
end
class_documentation?() click to toggle source
# File lib/rubocop/rspec/description_extractor.rb, line 58
def class_documentation?
  yardoc.type.equal?(:class)
end
cop_name() click to toggle source
# File lib/rubocop/rspec/description_extractor.rb, line 50
def cop_name
  Object.const_get(documented_constant).cop_name
end
cop_subclass?() click to toggle source
# File lib/rubocop/rspec/description_extractor.rb, line 70
def cop_subclass?
  # YARD superclass resolution is a bit flaky: All classes loaded before
  # RuboCop::Cop::WorkaroundCop are shown as having RuboCop::Cop as
  # superclass, while all the following classes are listed as having
  # RuboCop::Cop::RSpec::Cop as their superclass.
  COP_CLASS_NAMES.include?(yardoc.superclass.path)
end
description() click to toggle source
# File lib/rubocop/rspec/description_extractor.rb, line 54
def description
  yardoc.docstring.split("\n\n").first.to_s
end
documented_constant() click to toggle source
# File lib/rubocop/rspec/description_extractor.rb, line 66
def documented_constant
  yardoc.to_s
end
rspec_cop_namespace?() click to toggle source
# File lib/rubocop/rspec/description_extractor.rb, line 62
def rspec_cop_namespace?
  documented_constant.start_with?(RSPEC_NAMESPACE)
end