Implandação da customização das permissões dos usuarios e das notificaçoes
This commit is contained in:
46
app/models/variavel_personalizada.rb
Normal file
46
app/models/variavel_personalizada.rb
Normal file
@@ -0,0 +1,46 @@
|
||||
# app/models/variavel_personalizada.rb
|
||||
#
|
||||
# Variável criada pelo ADM, com valor fixo, usável em qualquer mensagem.
|
||||
class VariavelPersonalizada < ApplicationRecord
|
||||
# Nome da tabela fixado: o Inflector pt-BR não resolve variavel → variaveis.
|
||||
self.table_name = 'variaveis_personalizadas'
|
||||
|
||||
# Mesmo formato que o renderizador aceita em {{...}}: letras minúsculas,
|
||||
# números e _ . Sem isso, o ADM cadastraria "Telefone Suporte" e a variável
|
||||
# nunca seria substituída — falha muda dentro da mensagem enviada.
|
||||
FORMATO_CHAVE = /\A[a-z][a-z0-9_]*\z/
|
||||
|
||||
before_validation :normalizar
|
||||
|
||||
validates :chave, presence: true, uniqueness: { case_sensitive: false },
|
||||
format: { with: FORMATO_CHAVE,
|
||||
message: 'use apenas letras minúsculas, números e _ (ex.: telefone_suporte)' }
|
||||
validates :valor, presence: true
|
||||
validate :nao_colidir_com_variavel_do_sistema
|
||||
|
||||
scope :ativas, -> { where(ativo: true) }
|
||||
scope :ordenadas, -> { order(:chave) }
|
||||
|
||||
def marcador = "{{#{chave}}}"
|
||||
|
||||
private
|
||||
|
||||
def normalizar
|
||||
self.chave = chave.to_s.strip.downcase.tr(' ', '_')
|
||||
self.valor = valor.to_s.strip
|
||||
end
|
||||
|
||||
# Deixar o ADM criar {{valor}} ou {{motorista}} faria a variável dele
|
||||
# sobrescrever (ou ser sobrescrita por) a do sistema, dependendo da ordem —
|
||||
# exatamente o tipo de bug que não aparece no preview e aparece no envio.
|
||||
def nao_colidir_com_variavel_do_sistema
|
||||
return if chave.blank?
|
||||
|
||||
reservadas = Notificacao::CatalogoVariaveis::SISTEMA.keys +
|
||||
Notificacao::CatalogoVariaveis::CONTEXTO.keys +
|
||||
Notificacao::CatalogoVariaveis::DADOS.keys
|
||||
return unless reservadas.include?(chave)
|
||||
|
||||
errors.add(:chave, "já existe no sistema — escolha outro nome (ex.: #{chave}_empresa)")
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user