# frozen_string_literal: true class Site # Gestor de formularios del sitio 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) dig(field.to_s, 'label', I18n.locale.to_s) end end # Campos del formulario que no son necesarios EXCLUDED_FIELDS = %w[separator redirect].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