Module: Journaled::AuditLog::BlockedMethods

Defined in:
lib/journaled/audit_log.rb

Constant Summary collapse

BLOCKED_METHODS =
{
  delete: '#destroy',
  update_column: '#update!',
  update_columns: '#update!',
}.freeze

Instance Method Summary collapse

Instance Method Details

#_journaled_audit_log_check!(method, **kwargs) ⇒ Object

rubocop:disable Metrics/AbcSize



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/journaled/audit_log.rb', line 128

def _journaled_audit_log_check!(method, **kwargs) # rubocop:disable Metrics/AbcSize
  force_was = AuditLog._force
  AuditLog._force = kwargs.delete(:_force) if kwargs.key?(:_force)
  audited_columns = kwargs.keys - audit_log_config.ignored_columns

  if method == :delete || audited_columns.any?
    column_message = <<~MSG if kwargs.any?
      You are attempting to change the following audited columns:
        #{audited_columns.inspect}

    MSG
    raise <<~MSG if audit_log_config.enabled? && !AuditLog._force
      #{column_message}Using `#{method}` is blocked because it skips audit logging (and other Rails callbacks)!
      Consider using `#{BLOCKED_METHODS[method]}` instead, or pass `_force: true` as an argument.
    MSG
  end

  yield
ensure
  AuditLog._force = force_was
end

#delete(**kwargs) ⇒ Object



110
111
112
113
114
# File 'lib/journaled/audit_log.rb', line 110

def delete(**kwargs)
  _journaled_audit_log_check!(:delete, **kwargs) do
    super()
  end
end

#update_column(name, value, **kwargs) ⇒ Object



116
117
118
119
120
# File 'lib/journaled/audit_log.rb', line 116

def update_column(name, value, **kwargs)
  _journaled_audit_log_check!(:update_column, **kwargs.merge(name => value)) do
    super(name, value)
  end
end

#update_columns(args = {}, **kwargs) ⇒ Object



122
123
124
125
126
# File 'lib/journaled/audit_log.rb', line 122

def update_columns(args = {}, **kwargs)
  _journaled_audit_log_check!(:update_columns, **args.merge(kwargs)) do
    super(args.merge(kwargs).except(:_force))
  end
end