class DeadEnd::HeredocBlockParse

Takes in a source, and returns blocks containing each heredoc

Attributes

code_lines[R]
lex[R]

Public Class Methods

new(source:, code_lines: ) click to toggle source
# File lib/dead_end/heredoc_block_parse.rb, line 8
def initialize(source:, code_lines: )
  @code_lines = code_lines
  @lex = LexAll.new(source: source)
end

Public Instance Methods

call() click to toggle source
# File lib/dead_end/heredoc_block_parse.rb, line 13
def call
  blocks = []
  beginning = []
  @lex.each do |lex|
    case lex.type
    when :on_heredoc_beg
      beginning << lex.line
    when :on_heredoc_end
      start_index = beginning.pop - 1
      end_index = lex.line - 1
      blocks << CodeBlock.new(lines: code_lines[start_index..end_index])
    end
  end

  blocks
end