5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-22 22:16:22 +00:00
panel/app/models/site/writer.rb
2019-08-13 20:52:05 -03:00

39 lines
897 B
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
# TODO: si el archivo está bloqueado, esperar al desbloqueo
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