Module: ExecutionDeadline::Deadliner

Defined in:
lib/execution_deadline/deadliner.rb

Constant Summary collapse

WRAPPED_METHOD =
Proc.new do |options|
  Proc.new do |*args, **kwargs, &blk|
    set_deadline = options[:in]  && ExecutionDeadline.set_deadline(
      expires_at: Time.now + options[:in],
      raises: options[:raises]
    )

    ExecutionDeadline.current_deadline&.require_seconds_left!(options[:runs_for]) if options[:runs_for]
    super(*args, **kwargs, &blk).tap do
      ExecutionDeadline.current_deadline&.check_deadline_expiration!
    end
  ensure
    ExecutionDeadline.clear_deadline! if set_deadline
  end
end

Instance Method Summary collapse

Instance Method Details

#_execution_deadline_built_forObject



23
24
25
# File 'lib/execution_deadline/deadliner.rb', line 23

def _execution_deadline_built_for
  @_execution_deadline_built_for
end

#_execution_deadline_built_for=(val) ⇒ Object



27
28
29
# File 'lib/execution_deadline/deadliner.rb', line 27

def _execution_deadline_built_for=(val)
  @_execution_deadline_built_for = val
end

#inspectObject



19
20
21
# File 'lib/execution_deadline/deadliner.rb', line 19

def inspect
  "ExecutionDeadline::#{@_execution_deadline_built_for}Proxy"
end

#wrap_implementation(method_name, config) ⇒ Object



31
32
33
# File 'lib/execution_deadline/deadliner.rb', line 31

def wrap_implementation(method_name, config)
  define_method(method_name, &WRAPPED_METHOD.call(config))
end