sutty/app/models/metadata_slug.rb

46 lines
1.2 KiB
Ruby
Raw Normal View History

2019-08-08 18:28:23 +00:00
# frozen_string_literal: true
2019-08-07 21:35:37 +00:00
require 'jekyll/utils'
# El slug es el nombre del archivo sin la fecha ni la extensión y se
# deriva del título.
#
# Si el slug del document es distinto al que le asignaría el título
# slugificado, quiere decir que lo indicamos manualmente y no hay que
# cambiarlo.
#
# Pero si cambiamos el slug manualmente, tenemos que darle prioridad a
# ese cambio.
#
# El slug por defecto es el asignado por el documento.
#
# Si no hay slug, slugificamos el título.
#
# Si cambiamos el título y el slug coincide con el slug del título
# anterior, también lo cambiamos para mantener las URLs consistentes.
# Luego podemos usar el plugin que guarda los slugs anteriores para
# generar links.
#
# TODO: Transliterar tildes?
class MetadataSlug < MetadataTemplate
# Trae el slug desde el título si existe o una string al azar
def default_value
if title
Jekyll::Utils.slugify(title)
else
SecureRandom.hex
end
end
def value
self[:value] ||= document.data.fetch('slug', default_value)
2019-08-07 21:35:37 +00:00
end
private
2020-08-20 23:38:31 +00:00
# Devuelve el título a menos que sea privado y no esté vacío
2019-08-07 21:35:37 +00:00
def title
2020-08-21 00:08:44 +00:00
post.title.try(:value).try(:to_s) unless post.title.private? && !post.title.try(:value).try(:blank?)
2019-08-07 21:35:37 +00:00
end
end