class Erudite::Example::Parser

Parses IRB output into examples.

Public Class Methods

exemplify(lines) click to toggle source
# File lib/erudite/example/parser.rb, line 26
def self.exemplify(lines)
  source = extract_source(lines)
  result = extract_result(lines)
  output = extract_output(lines)

  Example.new(source, result, output)
end
extract_output(lines) click to toggle source
# File lib/erudite/example/parser.rb, line 48
def self.extract_output(lines)
  output = lines
           .reject { |line| line.start_with?('>> ', '.. ', '=> ') }
           .map(&:chomp)
  output.join("\n") unless output.empty?
end
extract_result(lines) click to toggle source
# File lib/erudite/example/parser.rb, line 41
def self.extract_result(lines)
  result = lines
           .select { |line| line.start_with?('=> ') }
           .map { |line| line[3..-1].chomp }
  result.join("\n") unless result.empty?
end
extract_source(lines) click to toggle source
# File lib/erudite/example/parser.rb, line 34
def self.extract_source(lines)
  source = lines
           .select { |line| line.start_with?('>> ', '.. ') }
           .map { |line| line[3..-1].chomp }
  source.join("\n") unless source.empty?
end
group(string) click to toggle source
# File lib/erudite/example/parser.rb, line 11
def self.group(string)
  buffer = []

  groups = string.each_line.each_with_object([]) do |line, array|
    if line.start_with?('>> ') && !buffer.empty?
      array.push(buffer)
      buffer = []
    end

    buffer.push(line)
  end

  buffer.empty? ? groups : groups.push(buffer)
end
parse(string) click to toggle source
# File lib/erudite/example/parser.rb, line 7
def self.parse(string)
  group(string).map { |lines| exemplify(lines) }
end