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
|
class << self
|
||||||
# Obtiene el layout sin leer el Document
|
# Obtiene el layout sin leer el Document
|
||||||
|
#
|
||||||
|
# TODO: Reemplazar cuando leamos el contenido del Document
|
||||||
|
# a demanda?
|
||||||
def find_layout(doc)
|
def find_layout(doc)
|
||||||
SafeYAML.load(IO.foreach(doc.path).lazy.grep(/^layout: /).take(1).first)
|
IO.foreach(doc.path).lazy.grep(/^layout: /).take(1).first
|
||||||
.try(:[], 'layout')
|
.try(:split, ' ').try(:last).try(:to_sym)
|
||||||
.try(:to_sym)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -70,6 +72,10 @@ class Post < OpenStruct
|
||||||
document.read! if File.exist? document.path
|
document.read! if File.exist? document.path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def inspect
|
||||||
|
"#<Post id=\"#{id}\">"
|
||||||
|
end
|
||||||
|
|
||||||
# Devuelve una llave para poder guardar el post en una cache
|
# Devuelve una llave para poder guardar el post en una cache
|
||||||
def cache_key
|
def cache_key
|
||||||
'posts/' + uuid.value
|
'posts/' + uuid.value
|
||||||
|
@ -131,9 +137,7 @@ class Post < OpenStruct
|
||||||
PRIVATE_ATTRIBUTES.include?(mid) ||
|
PRIVATE_ATTRIBUTES.include?(mid) ||
|
||||||
PUBLIC_ATTRIBUTES.include?(mid)
|
PUBLIC_ATTRIBUTES.include?(mid)
|
||||||
|
|
||||||
if !included && singleton_class.method_defined?(:attributes)
|
included = attributes.include? mid if !included && singleton_class.method_defined?(:attributes)
|
||||||
included = attributes.include? mid
|
|
||||||
end
|
|
||||||
|
|
||||||
included
|
included
|
||||||
end
|
end
|
||||||
|
@ -146,6 +150,8 @@ class Post < OpenStruct
|
||||||
end
|
end
|
||||||
|
|
||||||
# Genera el post con metadatos en YAML
|
# Genera el post con metadatos en YAML
|
||||||
|
#
|
||||||
|
# TODO: Cachear por un minuto
|
||||||
def full_content
|
def full_content
|
||||||
body = ''
|
body = ''
|
||||||
yaml = layout.metadata.keys.map(&:to_sym).map do |metadata|
|
yaml = layout.metadata.keys.map(&:to_sym).map do |metadata|
|
||||||
|
@ -183,6 +189,8 @@ class Post < OpenStruct
|
||||||
alias destroy! destroy
|
alias destroy! destroy
|
||||||
|
|
||||||
# Guarda los cambios
|
# Guarda los cambios
|
||||||
|
# TODO: Agregar una forma de congelar todos los valores y solo guardar
|
||||||
|
# uno, para no incorporar modificaciones
|
||||||
# rubocop:disable Metrics/CyclomaticComplexity
|
# rubocop:disable Metrics/CyclomaticComplexity
|
||||||
def save(validate: true)
|
def save(validate: true)
|
||||||
return false if validate && !valid?
|
return false if validate && !valid?
|
||||||
|
@ -245,6 +253,10 @@ class Post < OpenStruct
|
||||||
end
|
end
|
||||||
|
|
||||||
# Verifica si hace falta escribir cambios
|
# 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?
|
def persisted?
|
||||||
File.exist?(path.absolute) && full_content == File.read(path.absolute)
|
File.exist?(path.absolute) && full_content == File.read(path.absolute)
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,15 @@
|
||||||
# Se encarga de guardar los cambios en los archivos y mantenerlos
|
# Se encarga de guardar los cambios en los archivos y mantenerlos
|
||||||
# actualizados en git
|
# actualizados en git
|
||||||
Site::Writer = Struct.new(:site, :file, :content, keyword_init: true) do
|
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
|
def save
|
||||||
mkdir_p
|
mkdir_p
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue