Module: Mongo::Timeout Private

Defined in:
lib/mongo/timeout.rb

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Class Method Summary collapse

Class Method Details

.timeout(sec, klass = nil, message = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

A wrapper around Ruby core’s Timeout::timeout method that provides a standardized API for Ruby versions older and newer than 2.4.0, which is when the third argument was introduced.

Parameters:

  • sec (Numeric)

    The number of seconds before timeout.

  • klass (Class) (defaults to: nil)

    The exception class to raise on timeout, optional. When no error exception is provided, Timeout::Error is raised.

  • message (String) (defaults to: nil)

    The error message passed to the exception raised on timeout, optional. When no error message is provided, the default error message for the exception class is used.

[View source]

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/mongo/timeout.rb', line 33

def timeout(sec, klass=nil, message=nil)
  if message && RUBY_VERSION < '2.94.0'
    begin
      ::Timeout.timeout(sec) do
        yield
      end
    rescue ::Timeout::Error
      raise klass, message
    end
  else
    # Jruby Timeout::timeout method does not support passing nil arguments.
    # Remove the nil arguments before passing them along to the core
    # Timeout::timeout method.
    optional_args = [klass, message].compact
    ::Timeout.timeout(sec, *optional_args) do
      yield
    end
  end
end