class Doctest::Core::Base

Constants

CODE_REGEXP
RESULT_REGEXP

Public Class Methods

analyze(str) click to toggle source
# File lib/doctest/core/base.rb, line 5
def self.analyze(str)
  self.new(str).analyze
end
new(source) click to toggle source
# File lib/doctest/core/base.rb, line 12
def initialize(source)
  if File.exists?(source)
    @filename = source
    @str = File.read(source)
  else
    @filename = nil
    @str = source
  end
  @state   = :no_match
  @current = nil
  @doctests = []
end

Public Instance Methods

analyze() click to toggle source
# File lib/doctest/core/base.rb, line 25
def analyze
  @str.lines.each.with_index do |line, index|
    case line
    when CODE_REGEXP
      handle_code(Regexp.last_match['code'])
    when RESULT_REGEXP
      handle_result(Regexp.last_match['result'], index)
    else
      handle_no_doctest
    end
  end

  @doctests
end

Private Instance Methods

add_doctest(code_lines, result, line_index) click to toggle source
# File lib/doctest/core/base.rb, line 42
def add_doctest(code_lines, result, line_index)
  @doctests << Doctest.new(code_lines.join(';'), result, @filename, line_index + 1)
end
handle_code(code) click to toggle source
# File lib/doctest/core/base.rb, line 46
def handle_code(code)
  case @state
  when :no_match
    @current_code = [code]
    @state = :match
  when :match
    @current_code << code
  end
end
handle_no_doctest() click to toggle source
# File lib/doctest/core/base.rb, line 64
def handle_no_doctest
  reset
end
handle_result(result, line_index) click to toggle source
# File lib/doctest/core/base.rb, line 56
def handle_result(result, line_index)
  case @state
  when :match
    add_doctest(@current_code, result, line_index)
    reset
  end
end
reset() click to toggle source
# File lib/doctest/core/base.rb, line 68
def reset
  @state = :no_match
  @current
end