module Lab42::Literate::Extractor
Constants
- ALTERNATE_EQ_FORM
- START_EXTRACTION
- STOP_EXTRACTION
Public Instance Methods
extract(from_lines)
click to toggle source
# File lib/lab42/literate/extractor.rb, line 12 def extract from_lines initial = OpenStruct.new(state: :outside, blocks: []) from_lines .each_with_index .inject(initial){|acc, (line, lnb)| update(line, lnb, acc) } .blocks end
Private Instance Methods
convert(line)
click to toggle source
Potentially convert alternate equality syntax to class equality synatx, meaning that A(.*)s+#=>s+(.*)z => expect(strip($1)).to eq(strip($2))
# File lib/lab42/literate/extractor.rb, line 25 def convert line line.chomp.sub(ALTERNATE_EQ_FORM){ |*| %W{#{$1}expect(#{$2}).to eq(#{$3.strip})}.join(' ') } end
merge_acc(acc, **params)
click to toggle source
# File lib/lab42/literate/extractor.rb, line 56 def merge_acc acc, **params OpenStruct.new(**(acc.to_h.merge params)) end
update(line, lnb, acc)
click to toggle source
# File lib/lab42/literate/extractor.rb, line 30 def update line, lnb, acc if acc.state == :outside update_outside line, lnb, acc else update_inside line, acc end end
update_inside(line, acc)
click to toggle source
# File lib/lab42/literate/extractor.rb, line 38 def update_inside line, acc if STOP_EXTRACTION === line.chomp merge_acc( acc, state: :outside ) else acc.blocks.last.add_line(convert(line)) acc end end
update_outside(line, lnb, acc)
click to toggle source
# File lib/lab42/literate/extractor.rb, line 47 def update_outside line, lnb, acc match = START_EXTRACTION.match line.chomp if match merge_acc( acc, state: :inside, blocks: acc.blocks << Block.new(lnb, title: match['explicit_title']) ) else acc end end