mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-15 04:11:41 +00:00
57 lines
1.4 KiB
Ruby
57 lines
1.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class Site
|
||
|
module Forms
|
||
|
# Esta clase es un Hash que es capaz de convertirse a strong params
|
||
|
# según la definición del formulario en el sitio.
|
||
|
class Form < Hash
|
||
|
# Convierte el formulario a strong params
|
||
|
#
|
||
|
# @return Array
|
||
|
def params
|
||
|
map do |field, definition|
|
||
|
next if EXCLUDED_FIELDS.include? definition['type']
|
||
|
|
||
|
if ARRAY_FIELDS.include? definition['type']
|
||
|
{ field.to_sym => [] }
|
||
|
else
|
||
|
field.to_sym
|
||
|
end
|
||
|
end.compact
|
||
|
end
|
||
|
|
||
|
def t(field)
|
||
|
self[field.to_s]['label'][I18n.locale.to_s]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# Campos del formulario que no son necesarios
|
||
|
EXCLUDED_FIELDS = %w[separator].freeze
|
||
|
# Campos que aceptan valores múltiples (checkboxes, input-map,
|
||
|
# input-tag)
|
||
|
ARRAY_FIELDS = %w[array].freeze
|
||
|
|
||
|
# Obtiene todos los formularios disponibles
|
||
|
#
|
||
|
# @return Array Formularios disponibles para este sitio
|
||
|
def forms
|
||
|
@forms ||= data.dig('forms').try(:keys) || []
|
||
|
end
|
||
|
|
||
|
# El nombre del formulario está disponible
|
||
|
#
|
||
|
# @param [String|Symbol] El nombre del formulario
|
||
|
def form?(name)
|
||
|
forms.include? name.to_s
|
||
|
end
|
||
|
|
||
|
# Obtiene un formulario
|
||
|
#
|
||
|
# @return Site::Forms::Form
|
||
|
def form(name)
|
||
|
@cached_forms ||= {}
|
||
|
@cached_forms[name] ||= Form[data.dig('forms', name)]
|
||
|
end
|
||
|
end
|
||
|
end
|