Class: Erudite::Parser
- Inherits:
-
Object
- Object
- Erudite::Parser
- Defined in:
- lib/erudite/parser.rb
Overview
Parses IRB output into examples.
Class Method Summary collapse
- .exemplify(lines) ⇒ Object
- .extract_output(lines) ⇒ Object
- .extract_result(lines) ⇒ Object
- .extract_source(lines) ⇒ Object
- .group(string) ⇒ Object
- .parse(string) ⇒ Object
Class Method Details
.exemplify(lines) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/erudite/parser.rb', line 25 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) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/erudite/parser.rb', line 47 def self.extract_output(lines) output = lines .reject { |line| line.start_with?('>> ', '.. ', '=> ') } .map { |line| line.chomp } output.join("\n") unless output.empty? end |
.extract_result(lines) ⇒ Object
40 41 42 43 44 45 |
# File 'lib/erudite/parser.rb', line 40 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) ⇒ Object
33 34 35 36 37 38 |
# File 'lib/erudite/parser.rb', line 33 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) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/erudite/parser.rb', line 10 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) ⇒ Object
6 7 8 |
# File 'lib/erudite/parser.rb', line 6 def self.parse(string) group(string).map { |lines| exemplify(lines) } end |