Sha256: 5fb196f1f2aa75f7850beff8469a7cf2c04d8cae8d77df978f6cd827a2e46d52

Contents?: true

Size: 852 Bytes

Versions: 21

Compression:

Stored size: 852 Bytes

Contents

# frozen_string_literal: true

require "refinements/arrays"

module Tocer
  module Transformers
    # Transforms a Markdown header (plain text) into a table of contents link.
    class Text
      using Refinements::Arrays

      def initialize text, header: Parsers::Header
        @header = header.new text
      end

      def label
        header.content
      end

      def url
        label.downcase.gsub(/\s/, "-").gsub(/[^\w\-]+/, "")
      end

      def transform url_suffix: ""
        modified_url = [url, url_suffix.to_s].compress.join "-"
        "#{indented_bullet}[#{label}](##{modified_url})"
      end

      private

      attr_reader :header

      def prefix_to_spaces
        Array.new(header.prefix.length, "  ").join
      end

      def indented_bullet
        prefix_to_spaces.gsub(/\s{2}$/, "- ")
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
tocer-3.0.0 lib/tocer/transformers/text.rb