Sha256: a0d1b922cc8a6702d886eee06d5df9a74e814b351ed95f473a69b3ec5e3f3fac

Contents?: true

Size: 822 Bytes

Versions: 11

Compression:

Stored size: 822 Bytes

Contents

# frozen_string_literal: true

require "core"
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, parser: Parsers::Header
        @parser = parser.new text
      end

      def label = parser.content

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

      def call(url_suffix: "") = "#{indented_bullet}[#{label}](##{computed_url url_suffix})"

      private

      attr_reader :parser

      def computed_url(suffix = Core::EMPTY_STRING) = [url, suffix.to_s].compress.join("-")

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

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

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
tocer-16.2.1 lib/tocer/transformers/text.rb
tocer-16.2.0 lib/tocer/transformers/text.rb
tocer-16.1.0 lib/tocer/transformers/text.rb
tocer-16.0.3 lib/tocer/transformers/text.rb
tocer-16.0.2 lib/tocer/transformers/text.rb
tocer-16.0.1 lib/tocer/transformers/text.rb
tocer-16.0.0 lib/tocer/transformers/text.rb
tocer-15.2.0 lib/tocer/transformers/text.rb
tocer-15.1.2 lib/tocer/transformers/text.rb
tocer-15.1.1 lib/tocer/transformers/text.rb
tocer-15.1.0 lib/tocer/transformers/text.rb