class Tocer::Writer
Writes table of contents to a Markdown document. :reek: DataClump
Attributes
builder[R]
Public Class Methods
add(start_index:, old_lines:, new_lines: computed_new_lines = start_index.zero? ? new_lines : new_lines + "\n")
click to toggle source
# File lib/tocer/writer.rb, line 13 def self.add start_index:, old_lines:, new_lines: computed_new_lines = start_index.zero? ? new_lines : new_lines + "\n" old_lines.insert start_index, *computed_new_lines end
new(builder: Builder.new)
click to toggle source
# File lib/tocer/writer.rb, line 23 def initialize builder: Builder.new @builder = builder end
remove(start_index, finish_index, lines)
click to toggle source
# File lib/tocer/writer.rb, line 18 def self.remove start_index, finish_index, lines range = (start_index - 1)..finish_index lines.reject.with_index { |_, index| range.include? index } end
Public Instance Methods
call(path, label: CLI::Configuration::Loader.call.label)
click to toggle source
# File lib/tocer/writer.rb, line 27 def call path, label: CLI::Configuration::Loader.call.label path.rewrite do |body| lines = body.each_line.to_a builder.prependable?(lines) ? prepend(lines, label) : replace(lines, label) end end
Private Instance Methods
content(lines, label)
click to toggle source
# File lib/tocer/writer.rb, line 52 def content(lines, label) = builder.call(lines, label: label) end
prepend(lines, label)
click to toggle source
# File lib/tocer/writer.rb, line 50 def prepend(lines, label) = [content(lines, label), lines.join].compress.join("\n") def content(lines, label) = builder.call(lines, label: label) end end
replace(lines, label)
click to toggle source
# File lib/tocer/writer.rb, line 38 def replace lines, label start_index = builder.start_index lines finish_index = builder.finish_index lines klass = self.class klass.add( start_index: start_index, old_lines: klass.remove(start_index, finish_index, lines), new_lines: content(lines[finish_index, lines.length], label) ).join end