sutty/app/models/site/writer.rb

47 lines
1.2 KiB
Ruby
Raw Normal View History

2019-07-30 21:07:08 +00:00
# frozen_string_literal: true
class Site
# Se encarga de guardar los cambios en los archivos y mantenerlos
# actualizados en git
class Writer
attr_reader :site, :file, :content, :usuarie, :message
def initialize(site:, file:, content:, usuarie:, message:)
@site = site
@content = content
@file = file
@usuarie = usuarie
@message = message
end
# rubocop:disable Metrics/AbcSize
def save
r = File.open(file, File::RDWR | File::CREAT, 0o640) do |f|
# Bloquear el archivo para que no sea accedido por otro
# proceso u otra editora
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
r.zero? && site.repository.commit(file: relative_file,
usuarie: usuarie,
message: message)
end
# rubocop:enable Metrics/AbcSize
# 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
end
end