class Abid::Session
Attributes
error[R]
Public Class Methods
new(task)
click to toggle source
# File lib/abid/session.rb, line 10 def initialize(task) @task = task @state = task.state @entered = false @locked = false @result = nil @error = nil @ivar = Concurrent::IVar.new @on_success = [] @on_fail = [] end
Public Instance Methods
add_observer(*args, &block)
click to toggle source
# File lib/abid/session.rb, line 43 def add_observer(*args, &block) @ivar.add_observer(*args, &block) end
cancel(error)
click to toggle source
# File lib/abid/session.rb, line 85 def cancel(error) unlock(error) @result = :canceled @error = error @ivar.fail(error) rescue Concurrent::MultipleAssignmentError end
capture_exception(&block)
click to toggle source
# File lib/abid/session.rb, line 37 def capture_exception(&block) block.call rescue Exception => e self.fail(e) end
enter(&block)
click to toggle source
# File lib/abid/session.rb, line 28 def enter(&block) synchronize do return @ivar if @entered @entered = true end block.call @ivar end
fail(error)
click to toggle source
# File lib/abid/session.rb, line 76 def fail(error) @result = :failed @error = error unlock(error) @ivar.fail(error) rescue Concurrent::MultipleAssignmentError rescue Exception => e @ivar.fail(e) rescue Concurrent::MultipleAssignmentError end
lock()
click to toggle source
# File lib/abid/session.rb, line 47 def lock synchronize do @state.start unless @locked @locked = true true end rescue AbidErrorTaskAlreadyRunning false end
skip()
click to toggle source
# File lib/abid/session.rb, line 70 def skip unlock @result = :skipped @ivar.try_set(false) end
success()
click to toggle source
# File lib/abid/session.rb, line 64 def success unlock @result = :successed @ivar.try_set(true) end
synchronize(&block)
click to toggle source
# File lib/abid/session.rb, line 24 def synchronize(&block) self.class.synchronize(&block) end
unlock(error = nil)
click to toggle source
# File lib/abid/session.rb, line 57 def unlock(error = nil) synchronize do @state.finish(error) if @locked @locked = false end end