# 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 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 def write(usuarie = nil) return if persisted? Site::Writer.new(site: site, file: path, content: content.to_yaml, usuarie: usuarie, message: I18n.t('sites.repository.config')).save # Actualizar el hash para no escribir dos veces @hash = content.hash end # 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