Module: StringMagic::Utilities::Slug

Included in:
String, StringMagic
Defined in:
lib/string_magic/utilities/slug.rb

Instance Method Summary collapse

Instance Method Details

#extract_slug_from_urlObject



46
47
48
49
50
51
# File 'lib/string_magic/utilities/slug.rb', line 46

def extract_slug_from_url
  return '' if empty?
  clean = split('/').last.to_s.split(/[?#]/).first
  clean.gsub!(/\.\w+$/, '') if clean.match?(/\.\w+$/)
  clean
end

#slugify_path(separator: '/') ⇒ Object



41
42
43
44
# File 'lib/string_magic/utilities/slug.rb', line 41

def slugify_path(separator: '/')
  return '' if empty?
  split('/').map { |seg| seg.to_slug }.reject(&:empty?).join(separator)
end

#to_filename_safe(replacement: '_', preserve_case: false) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/string_magic/utilities/slug.rb', line 26

def to_filename_safe(replacement: '_', preserve_case: false)
  return '' if empty?
  result = transliterate_accents(dup)
  result.downcase! unless preserve_case
  result.gsub!(/[^0-9A-Za-z\.\-]+/, replacement)               # keep only safe chars
  # convert file extension: ".txt" → "_txt"
  result.gsub!(/\.([a-z0-9]{1,5})\z/i, "#{replacement}\\1")
  result.gsub!(/\.+$/, '')                                      # drop any remaining trailing dots
  result.gsub!(/#{Regexp.escape(replacement)}+/, replacement)   # collapse runs
  result.gsub!(/^#{Regexp.escape(replacement)}+|#{Regexp.escape(replacement)}+$/, '') # trim
  result = 'untitled'  if result.empty?
  result = "#{result}_file" if reserved_filename?(result)
  result
end

#to_slug(separator: '-', preserve_case: false) ⇒ Object


Public helpers




10
11
12
13
14
15
16
17
18
19
20
# File 'lib/string_magic/utilities/slug.rb', line 10

def to_slug(separator: '-', preserve_case: false)
  return '' if empty?

  result = dup
  result.downcase! unless preserve_case
  result = transliterate_accents(result)
  result.gsub!(/<[^>]*>/, '')                       # strip HTML
  result.gsub!(/[^A-Za-z0-9]+/, separator)          # non-alnum → sep
  result.gsub!(/^#{Regexp.escape(separator)}+|#{Regexp.escape(separator)}+$/, '')
  result
end

#to_url_slugObject



22
23
24
# File 'lib/string_magic/utilities/slug.rb', line 22

def to_url_slug
  to_slug(separator: '-', preserve_case: false)
end