diff --git a/app/models/post.rb b/app/models/post.rb index e3ada412..19bb306e 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -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 + "#" + 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 diff --git a/app/models/site/writer.rb b/app/models/site/writer.rb index a8e5b77f..e630b442 100644 --- a/app/models/site/writer.rb +++ b/app/models/site/writer.rb @@ -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