Sha256: 6c932859e6a6f87f28ab868942d9eec2995a591afb6680f3c6ce2663c75035e7

Contents?: true

Size: 1.12 KB

Versions: 19

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

require "refinements/arrays"

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

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

      def label
        header.content.gsub(embedded_link, embedded_link_label)
      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 embedded_link_label
        header.content[/\[(.*)\]/, 1]
      end

      def embedded_link_url
        header.content[/\((.*)\)/, 1]
      end

      def embedded_link
        "[#{embedded_link_label}](#{embedded_link_url})"
      end

      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

19 entries across 19 versions & 1 rubygems

Version Path
tocer-8.1.0 lib/tocer/transformers/link.rb
tocer-8.0.0 lib/tocer/transformers/link.rb
tocer-7.2.0 lib/tocer/transformers/link.rb
tocer-7.1.0 lib/tocer/transformers/link.rb
tocer-7.0.2 lib/tocer/transformers/link.rb
tocer-7.0.1 lib/tocer/transformers/link.rb
tocer-7.0.0 lib/tocer/transformers/link.rb
tocer-6.3.1 lib/tocer/transformers/link.rb
tocer-6.3.0 lib/tocer/transformers/link.rb
tocer-6.2.0 lib/tocer/transformers/link.rb
tocer-6.1.0 lib/tocer/transformers/link.rb
tocer-6.0.0 lib/tocer/transformers/link.rb
tocer-5.0.0 lib/tocer/transformers/link.rb
tocer-4.0.0 lib/tocer/transformers/link.rb
tocer-3.3.0 lib/tocer/transformers/link.rb
tocer-3.2.0 lib/tocer/transformers/link.rb
tocer-3.1.1 lib/tocer/transformers/link.rb
tocer-3.1.0 lib/tocer/transformers/link.rb
tocer-3.0.0 lib/tocer/transformers/link.rb