class RSpec::Expectations::BlockSnippetExtractor

@private

Constants

AmbiguousTargetError
BlockLocator

@private Locates target block with node information (semantics), which tokens don’t have.

BlockTokenExtractor

@private Performs extraction of block body snippet using tokens, which cannot be done with node information.

Error
TargetNotFoundError

Attributes

method_name[R]

rubocop should properly handle `Struct.new {}` as an inner class definition.

proc[R]

rubocop should properly handle `Struct.new {}` as an inner class definition.

Public Class Methods

new(proc, method_name) click to toggle source
# File lib/rspec/expectations/block_snippet_extractor.rb, line 17
def initialize(proc, method_name)
  @proc = proc
  @method_name = method_name.to_s.freeze
end
try_extracting_single_line_body_of(proc, method_name) click to toggle source
# File lib/rspec/expectations/block_snippet_extractor.rb, line 9
def self.try_extracting_single_line_body_of(proc, method_name)
  lines = new(proc, method_name).body_content_lines
  return nil unless lines.count == 1
  lines.first
rescue Error
  nil
end

Public Instance Methods

body_content_lines() click to toggle source

Ideally we should properly handle indentations of multiline snippet, but it’s not implemented yet since because we use result of this method only when it’s a single line and implementing the logic introduces additional complexity.

# File lib/rspec/expectations/block_snippet_extractor.rb, line 25
def body_content_lines
  raw_body_lines.map(&:strip).reject(&:empty?)
end