Module: StringMagic::Utilities::Slug
- Included in:
- String, StringMagic
- Defined in:
- lib/string_magic/utilities/slug.rb
Instance Method Summary collapse
- #extract_slug_from_url ⇒ Object
- #slugify_path(separator: '/') ⇒ Object
- #to_filename_safe(replacement: '_', preserve_case: false) ⇒ Object
-
#to_slug(separator: '-', preserve_case: false) ⇒ Object
—————————————————————— Public helpers ——————————————————————.
- #to_url_slug ⇒ Object
Instance Method Details
#extract_slug_from_url ⇒ Object
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_slug ⇒ Object
22 23 24 |
# File 'lib/string_magic/utilities/slug.rb', line 22 def to_url_slug to_slug(separator: '-', preserve_case: false) end |