sutty/app/models/site/config.rb

61 lines
1.5 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
class Site
# Representa la configuración del sitio de forma que podamos leer y
# escribir en el archivo _config.yml
class Config < OpenStruct
def initialize(site)
# Iniciar el OpenStruct con el sitio
super(site: site)
read
end
# Obtener un valor por defecto a partir de la configuración
def fetch(key, default)
send(:[], key) || default
end
# Leer el archivo de configuración y setear los atributos en el
# objeto actual, creando los metodos de ostruct
def read
2019-07-30 21:07:08 +00:00
data = YAML.safe_load(File.read(path))
@hash = data.hash
data.each do |key, value|
send("#{key}=".to_sym, value)
end
end
# Escribe los cambios en el repositorio
2019-07-31 20:55:34 +00:00
def write(usuarie = nil)
2019-07-30 21:07:08 +00:00
return if persisted?
2019-07-30 21:07:08 +00:00
Site::Writer.new(site: site, file: path,
content: content.to_yaml, usuarie: usuarie,
message: I18n.t('sites.repository.config')).save
2019-07-31 20:55:34 +00:00
# Actualizar el hash para no escribir dos veces
@hash = content.hash
2019-07-30 21:07:08 +00:00
end
2019-07-30 21:07:08 +00:00
# Detecta si la configuración cambió comparando con el valor inicial
def persisted?
@hash == content.hash
end
# Obtener el contenido de la configuración como un hash, sin el
# sitio correspondiente.
def content
h = to_h.stringify_keys
h.delete 'site'
h
end
# Obtener la ruta donde se encuentra la configuración.
def path
File.join site.path, '_config.yml'
end
end
end