5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-06-02 13:34:16 +00:00
panel/app/models/site/writer.rb
2020-06-16 19:48:34 -03:00

48 lines
1.1 KiB
Ruby

# frozen_string_literal: true
# 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
# 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
File.open(file, File::RDWR | File::CREAT, 0o640) do |f|
# Bloquear el archivo para que no sea accedido por otro
# proceso u otre editore
f.flock(File::LOCK_EX)
# Empezar por el principio
f.rewind
# Escribir el contenido
f.write(content)
# Eliminar el resto
f.flush
f.truncate(f.pos)
end.zero?
end
# Devuelve la ruta relativa a la raíz del sitio
def relative_file
Pathname.new(file).relative_path_from(Pathname.new(site.path)).to_s
end
def dirname
File.dirname file
end
def mkdir_p
FileUtils.mkdir_p dirname
end
end