Class: Triggerable::Actions::LambdaAction

Inherits:
Action
  • Object
show all
Defined in:
lib/triggerable/actions/lambda_action.rb

Instance Method Summary collapse

Methods inherited from Action

build

Constructor Details

#initialize(block) ⇒ LambdaAction

Returns a new instance of LambdaAction.



4
5
6
# File 'lib/triggerable/actions/lambda_action.rb', line 4

def initialize(block)
  @block = block
end

Instance Method Details

#run_for!(object, trigger_name) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/triggerable/actions/lambda_action.rb', line 8

def run_for!(object, trigger_name)
  proc = @block
  object.instance_eval do
    change_whodunnit = trigger_name.present? && defined?(PaperTrail)
    paper_trail = (defined?(PaperTrail::Request) ? PaperTrail.request : PaperTrail) if change_whodunnit
    old_whodunnit = nil

    if change_whodunnit
      old_whodunnit = paper_trail.whodunnit
      paper_trail.whodunnit = trigger_name
    end

    begin
      instance_exec(&proc)
    ensure
      paper_trail.whodunnit = old_whodunnit if change_whodunnit
    end
  end
end