Module: ChrnoAudit::ActionControllerConcern::ClassMethods

Defined in:
lib/chrno_audit/action_controller_concern.rb

Instance Method Summary collapse

Instance Method Details

#audit_context(proc_or_symbol = nil, &block) ⇒ Object

Хелпер для установки контекста аудита.

Examples:

audit_context -> {{ ip: request.remote_addr }}

Parameters:

  • proc_or_symbol (Proc, Symbol) (defaults to: nil)

    символ или Proc для генерации контента (также может быть задано в виде блока)



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/chrno_audit/action_controller_concern.rb', line 19

def audit_context( proc_or_symbol = nil, &block )
  # Получаем Proc для генерации контекста
  context_generator =
    # Если задан блок -- используем его
    if block_given?
      block

    # Если указан символ, то вызываем соответствующий метод
    elsif proc_or_symbol.is_a? Symbol
      Proc.new { self.send proc_or_symbol }

    # Если указан Proc -- используем его
    elsif proc_or_symbol.is_a? Proc
      proc_or_symbol

    else
      raise ArgumentError, "Proc or Symbol expected, got: #{proc_or_symbol.inspect}"
    end

  before_filter do |controller|
    # NB: согласно документации Ruby в Thread.current хранятся per-fiber атрибуты!
    Thread.current[ :audit_context ] = Proc.new { controller.instance_exec( &context_generator ) }
  end
end