no usar safeyaml y algunos TODOes
This commit is contained in:
parent
58a6f1aa9c
commit
793a36d9e9
2 changed files with 27 additions and 7 deletions
|
@ -15,10 +15,12 @@ class Post < OpenStruct
|
|||
|
||||
class << self
|
||||
# Obtiene el layout sin leer el Document
|
||||
#
|
||||
# TODO: Reemplazar cuando leamos el contenido del Document
|
||||
# a demanda?
|
||||
def find_layout(doc)
|
||||
SafeYAML.load(IO.foreach(doc.path).lazy.grep(/^layout: /).take(1).first)
|
||||
.try(:[], 'layout')
|
||||
.try(:to_sym)
|
||||
IO.foreach(doc.path).lazy.grep(/^layout: /).take(1).first
|
||||
.try(:split, ' ').try(:last).try(:to_sym)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -70,6 +72,10 @@ class Post < OpenStruct
|
|||
document.read! if File.exist? document.path
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<Post id=\"#{id}\">"
|
||||
end
|
||||
|
||||
# Devuelve una llave para poder guardar el post en una cache
|
||||
def cache_key
|
||||
'posts/' + uuid.value
|
||||
|
@ -131,9 +137,7 @@ class Post < OpenStruct
|
|||
PRIVATE_ATTRIBUTES.include?(mid) ||
|
||||
PUBLIC_ATTRIBUTES.include?(mid)
|
||||
|
||||
if !included && singleton_class.method_defined?(:attributes)
|
||||
included = attributes.include? mid
|
||||
end
|
||||
included = attributes.include? mid if !included && singleton_class.method_defined?(:attributes)
|
||||
|
||||
included
|
||||
end
|
||||
|
@ -146,6 +150,8 @@ class Post < OpenStruct
|
|||
end
|
||||
|
||||
# Genera el post con metadatos en YAML
|
||||
#
|
||||
# TODO: Cachear por un minuto
|
||||
def full_content
|
||||
body = ''
|
||||
yaml = layout.metadata.keys.map(&:to_sym).map do |metadata|
|
||||
|
@ -183,6 +189,8 @@ class Post < OpenStruct
|
|||
alias destroy! destroy
|
||||
|
||||
# Guarda los cambios
|
||||
# TODO: Agregar una forma de congelar todos los valores y solo guardar
|
||||
# uno, para no incorporar modificaciones
|
||||
# rubocop:disable Metrics/CyclomaticComplexity
|
||||
def save(validate: true)
|
||||
return false if validate && !valid?
|
||||
|
@ -245,6 +253,10 @@ class Post < OpenStruct
|
|||
end
|
||||
|
||||
# Verifica si hace falta escribir cambios
|
||||
#
|
||||
# TODO: Cachear el resultado o usar otro método, por ejemplo guardando
|
||||
# la fecha de modificación al leer y compararla al hacer cambios sin
|
||||
# escribirlos.
|
||||
def persisted?
|
||||
File.exist?(path.absolute) && full_content == File.read(path.absolute)
|
||||
end
|
||||
|
|
|
@ -3,7 +3,15 @@
|
|||
# Se encarga de guardar los cambios en los archivos y mantenerlos
|
||||
# actualizados en git
|
||||
Site::Writer = Struct.new(:site, :file, :content, keyword_init: true) do
|
||||
# TODO: si el archivo está bloqueado, esperar al desbloqueo
|
||||
# Realiza la escritura del archivo.
|
||||
#
|
||||
# **IMPORTANTE:** Usar rutas absolutas siempre y nunca confiar en una
|
||||
# ruta que venga de la Internet.
|
||||
#
|
||||
# TODO: Usar rutas relativas al sitio y sanitizar.
|
||||
#
|
||||
# TODO: si el archivo está bloqueado, esperar al desbloqueo. Realizar
|
||||
# asincrónicamente?
|
||||
def save
|
||||
mkdir_p
|
||||
|
||||
|
|
Loading…
Reference in a new issue