mirror of
https://0xacab.org/sutty/sutty
synced 2025-01-20 03:53:39 +00:00
usar structs para validar datos
los structs son como hashes con llaves fijas. si llamamos a una que no existe vamos a tener una excepción
This commit is contained in:
parent
8a9197c390
commit
57b652bbb1
3 changed files with 17 additions and 7 deletions
|
@ -169,10 +169,16 @@ class Site < ApplicationRecord
|
||||||
# @param lang: [String|Symbol] traer los artículos de este idioma
|
# @param lang: [String|Symbol] traer los artículos de este idioma
|
||||||
def posts(lang: nil)
|
def posts(lang: nil)
|
||||||
read
|
read
|
||||||
@posts ||= {}
|
|
||||||
lang ||= I18n.locale
|
|
||||||
|
|
||||||
return @posts[lang] if @posts.key? lang
|
# Traemos los posts del idioma actual por defecto
|
||||||
|
lang ||= I18n.locale
|
||||||
|
|
||||||
|
# Crea un Struct dinámico con los valores de los locales, si
|
||||||
|
# llegamos a pasar un idioma que no existe vamos a tener una
|
||||||
|
# excepción NoMethodError
|
||||||
|
@posts ||= Struct.new(*locales.map(&:to_sym)).new
|
||||||
|
|
||||||
|
return @posts[lang] unless @posts[lang].blank?
|
||||||
|
|
||||||
@posts[lang] = PostRelation.new site: self
|
@posts[lang] = PostRelation.new site: self
|
||||||
|
|
||||||
|
@ -201,11 +207,15 @@ class Site < ApplicationRecord
|
||||||
#
|
#
|
||||||
# @return { post: Layout }
|
# @return { post: Layout }
|
||||||
def layouts
|
def layouts
|
||||||
@layouts ||= data.fetch('layouts', {}).map do |name, metadata|
|
# Crea un Struct dinámico cuyas llaves son los nombres de todos los
|
||||||
|
# layouts. Si pasamos un layout que no existe, obtenemos un
|
||||||
|
# NoMethodError
|
||||||
|
@layouts_struct ||= Struct.new(*data.fetch('layouts', {}).keys.map(&:to_sym), keyword_init: true)
|
||||||
|
@layouts ||= @layouts_struct.new(**data.fetch('layouts', {}).map do |name, metadata|
|
||||||
{ name.to_sym => Layout.new(site: self,
|
{ name.to_sym => Layout.new(site: self,
|
||||||
name: name.to_sym,
|
name: name.to_sym,
|
||||||
metadata: metadata.with_indifferent_access) }
|
metadata: metadata.with_indifferent_access) }
|
||||||
end.inject(:merge)
|
end.inject(:merge))
|
||||||
end
|
end
|
||||||
|
|
||||||
# Trae todos los valores disponibles para un campo
|
# Trae todos los valores disponibles para un campo
|
||||||
|
|
|
@ -105,7 +105,7 @@ class Site
|
||||||
|
|
||||||
# Encuentra todos los layouts con campos estáticos
|
# Encuentra todos los layouts con campos estáticos
|
||||||
def layouts
|
def layouts
|
||||||
@layouts ||= site.layouts.reject do |_, layout|
|
@layouts ||= site.layouts.to_h.reject do |_, layout|
|
||||||
layout.metadata.select do |_, desc|
|
layout.metadata.select do |_, desc|
|
||||||
STATIC_TYPES.include? desc['type']
|
STATIC_TYPES.include? desc['type']
|
||||||
end.empty?
|
end.empty?
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
%h3= t('posts.new')
|
%h3= t('posts.new')
|
||||||
%ul
|
%ul
|
||||||
- @site.layouts.keys.each do |layout|
|
- @site.layouts.to_h.keys.each do |layout|
|
||||||
%li= link_to layout.to_s.humanize,
|
%li= link_to layout.to_s.humanize,
|
||||||
new_site_post_path(@site, layout: layout)
|
new_site_post_path(@site, layout: layout)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue