class GovukTechDocs::UniqueIdentifierGenerator
Constants
- Anchor
Attributes
anchors[R]
Public Class Methods
new()
click to toggle source
# File lib/govuk_tech_docs/unique_identifier_generator.rb, line 11 def initialize reset end
Public Instance Methods
create(id, level)
click to toggle source
# File lib/govuk_tech_docs/unique_identifier_generator.rb, line 15 def create(id, level) anchor = heading_slug(id) unless unique?(anchor) anchor = prefixed_by_parent(anchor, level) end unless unique?(anchor) anchor = suffixed_with_number(anchor) end @anchors << Anchor.new(anchor, level) anchor end
reset()
click to toggle source
# File lib/govuk_tech_docs/unique_identifier_generator.rb, line 31 def reset @anchors = [] end
Private Instance Methods
heading_slug(text)
click to toggle source
# File lib/govuk_tech_docs/unique_identifier_generator.rb, line 63 def heading_slug(text) text .downcase .strip .gsub(%r{</?[^>]+?>}, '') # Remove HTML tags .gsub(/[^0-9a-z]+/, '-') # Replace non-alphanumeric characters with dashes .gsub(/\A-+|-+\z/, '') # Remove trailing dashes end
prefixed_by_parent(anchor, level)
click to toggle source
# File lib/govuk_tech_docs/unique_identifier_generator.rb, line 37 def prefixed_by_parent(anchor, level) closest_parent = @anchors.reverse.find { |a| a.level < level } if closest_parent.nil? anchor else [closest_parent.id, anchor].join("-") end end
suffixed_with_number(text)
click to toggle source
# File lib/govuk_tech_docs/unique_identifier_generator.rb, line 46 def suffixed_with_number(text) number = 2 anchor = "#{text}-#{number}" until unique?(anchor) anchor = "#{text}-#{number}" number += 1 end anchor end
unique?(value)
click to toggle source
# File lib/govuk_tech_docs/unique_identifier_generator.rb, line 58 def unique?(value) @anchors.none? { |a| a.id == value } end