5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-15 04:11:41 +00:00
panel/app/models/site/forms.rb

57 lines
1.4 KiB
Ruby
Raw Normal View History

2020-05-30 19:43:25 +00:00
# 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