Sha256: 90c678728f3be3daa400ff92b57498d430844a7a21afdbd0df55860721624ef5
Contents?: true
Size: 1.46 KB
Versions: 5
Compression:
Stored size: 1.46 KB
Contents
# frozen_string_literal: true require "refinements/arrays" require "refinements/pathnames" module Tocer # Writes table of contents to a Markdown document. # :reek:DataClump class Writer using Refinements::Arrays using Refinements::Pathnames 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 def self.remove start_index, finish_index, lines range = (start_index - 1)..finish_index lines.reject.with_index { |_, index| range.include? index } end def initialize builder: Builder.new @builder = builder end 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 attr_reader :builder 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 def prepend(lines, label) = [content(lines, label), lines.join].compress.join("\n") def content(lines, label) = builder.call(lines, label: label) end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
tocer-12.2.0 | lib/tocer/writer.rb |
tocer-12.1.0 | lib/tocer/writer.rb |
tocer-12.0.4 | lib/tocer/writer.rb |
tocer-12.0.3 | lib/tocer/writer.rb |
tocer-12.0.2 | lib/tocer/writer.rb |