# app/controllers/admin/variaveis_personalizadas_controller.rb # # CRUD das {{variaveis}} que o ADM cria. Uma vez cadastradas, aparecem no editor # de mensagem ao lado das variáveis do sistema e valem para qualquer evento. module Admin class VariaveisPersonalizadasController < ApplicationController include Auditavel before_action :set_variavel, only: %i[edit update destroy] def index authorize VariavelPersonalizada @variaveis = policy_scope(VariavelPersonalizada).ordenadas # Mostrar o catálogo do sistema junto evita o erro mais comum: cadastrar # {{data}} sem saber que já existe (o model recusa, mas melhor avisar antes). @do_sistema = Notificacao::CatalogoVariaveis.por_origem.except(:personalizada) end def new @variavel = VariavelPersonalizada.new(ativo: true) authorize @variavel end def create @variavel = VariavelPersonalizada.new(variavel_params) authorize @variavel if @variavel.save auditar!(:criar, @variavel, dados_novos: { chave: @variavel.chave, valor: @variavel.valor }) redirect_to admin_variaveis_path, notice: "Variável #{@variavel.marcador} criada." else render :new, status: :unprocessable_entity end end def edit; end def update anterior = @variavel.valor if @variavel.update(variavel_params) auditar!(:editar, @variavel, dados_anteriores: { valor: anterior }, dados_novos: { valor: @variavel.valor }) redirect_to admin_variaveis_path, notice: "Variável #{@variavel.marcador} atualizada." else render :edit, status: :unprocessable_entity end end def destroy marcador = @variavel.marcador @variavel.destroy auditar!(:excluir, @variavel, dados_anteriores: { chave: @variavel.chave }) # A variável some, mas o texto que a usava continua lá: sem valor, o # renderizador troca por vazio. Avisar é melhor do que a mensagem sair com # um buraco que ninguém relaciona a esta exclusão. redirect_to admin_variaveis_path, alert: "Variável #{marcador} excluída. Mensagens que a usavam passam a mostrar espaço em branco no lugar." end private def set_variavel @variavel = VariavelPersonalizada.find(params[:id]) authorize @variavel end def variavel_params params.require(:variavel_personalizada).permit(:chave, :valor, :descricao, :ativo) end end end