Sha256: 852e84eb684ac1bd8d9c1650b2d208f9a5a90e5d6f32be979f973d51ccb37ecd

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

require 'tmpdir'

class MarkdownIrbRunner < MarkdownHelper

  IrbFilterPragma = '```#run_irb'
  BeginTextDirective = "=begin #{IrbFilterPragma}"
  EndTextDirective = "=end #{IrbFilterPragma}"

  def run_irb(template_file_path, markdown_file_path)
    irb_input = make_irb_input(template_file_path)
    irb_output = make_irb_output(irb_input)
    markdown = make_markdown(irb_output)
    File.write(markdown_file_path, markdown)
  end

  def make_irb_input(template_file_path)
    irb_lines = []
    irb_lines.push(BeginTextDirective)
    source_lines = File.readlines(template_file_path)
    source_lines.each do |source_line|
      source_line.chomp!
      if source_line == IrbFilterPragma
        irb_lines.push(EndTextDirective)
      elsif source_line == '```'
        irb_lines.push(BeginTextDirective)
      else
        irb_lines.push(source_line)
      end
    end
    irb_lines.push(EndTextDirective)
    irb_lines.push('') unless irb_lines.last.empty?
    irb_lines.join("\n")
  end

  def make_irb_output(irb_input)
    Dir.mktmpdir do |dir|
      Dir.chdir(dir) do
        File.write('irb_input', irb_input)
        command = 'irb --noecho irb_input | tail +2 | head --lines=-2 > irb_output'
        system(command )
        File.read('irb_output')
      end
    end
  end

  def make_markdown(irb_output)
    output_lines = []
    irb_lines = irb_output.split("\n")
    irb_lines.each_with_index do |irb_line, i|
      irb_line.chomp!
      if irb_line == BeginTextDirective
        output_lines.push('```') unless i == 0
        next
      end
      if irb_line == EndTextDirective
        output_lines.push('```ruby') unless i == irb_lines.size - 1
        next
      end
      output_lines.push(irb_line)
    end
    output_lines.push('') unless output_lines.last.nil? || output_lines.last.empty?
    output_lines.join("\n")
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
markdown_helper-2.4.0 lib/markdown_helper/markdown_irb_runner.rb