5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-05-19 10:40:48 +00:00

feat: organizar layouts #13072

This commit is contained in:
f 2023-04-17 18:30:21 -03:00
parent 7d9b96980a
commit 35b79ed9b4
3 changed files with 46 additions and 0 deletions

View file

@ -9,6 +9,13 @@ Layout = Struct.new(:site, :name, :meta, :metadata, keyword_init: true) do
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

View file

@ -9,6 +9,7 @@ class Site < ApplicationRecord
include Site::Api
include Site::DeployDependencies
include Site::BuildStats
include Site::LayoutOrdering
include Tienda
# Cifrar la llave privada que cifra y decifra campos ocultos. Sutty

View file

@ -0,0 +1,38 @@
# frozen_string_literal: true
class Site
# Obtiene un listado de layouts (schemas)
module LayoutOrdering
extend ActiveSupport::Concern
included do
# Obtiene o genera un listado de layouts (schemas) con sus
# dependencias, para poder generar un árbol.
#
# Por defecto, si el sitio no lo soporta, se obtienen los layouts
# ordenados alfabéticamente por traducción.
#
# @return [Hash]
def schema_organization
@schema_organization ||=
begin
schema_organization = data.dig('schema', 'organization')
schema_organization&.symbolize_keys!
schema_organization&.transform_values! do |ary|
ary.map(&:to_sym)
end
schema_organization ||
begin
layouts = self.layouts.sort_by(&:humanized_name).map(&:name)
Hash[layouts.zip([].fill([], 0, layouts.size))]
end
end
end
# TODO: Deprecar cuando renombremos layouts a schemas
alias layout_organization schema_organization
end
end
end