5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-05-19 12:20:48 +00:00
panel/app/models/layout.rb
2023-04-17 18:32:54 -03:00

52 lines
1.2 KiB
Ruby

# frozen_string_literal: true
# Una plantilla agrupa metadatos que va a tener un artículo.
#
# TODO: Renombrar metadatos a atributos o campos, ahora se llaman de
# varias formas por todo el código.
Layout = Struct.new(:site, :name, :meta, :metadata, keyword_init: true) do
def value
name.to_s
end
# Obtiene todos los layouts (schemas) dependientes de este.
#
# @return [Array]
def schemas
@schemas ||= site.layouts.to_h.slice(*site.schema_organization[name]).values
end
def attributes
@attributes ||= metadata.keys.map(&:to_sym)
end
# Busca la traducción del Layout en el sitio o intenta humanizarlo
# según Rails.
#
# @return [String]
def humanized_name
@humanized_name ||= site.i18n.dig('layouts', name.to_s) || name.to_s.humanize
end
# Detecta si el Layout no debería mostrarse
#
# @return [Boolean]
def hidden?
meta[:hidden].present?
end
# Detecta si el layout no es renderizable
def ignored?
@ignored ||= site.config['ignored_layouts']&.include? name.to_s
end
# Los metadatos del Layout.
#
# TODO: Inicializar con valores por defecto o usar Hash#default_proc
#
# @return [Hash]
def meta
@meta ||= self[:meta] || {}
end
end