module Mongo::Timeout

@api private

Public Class Methods

timeout(sec, klass=nil, message=nil) { || ... } click to toggle source

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.

@param [ Numeric ] sec The number of seconds before timeout. @param [ Class ] klass The exception class to raise on timeout, optional.

When no error exception is provided, Timeout::Error is raised.

@param [ String ] message 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.
# File lib/mongo/timeout.rb, line 30
def timeout(sec, klass=nil, message=nil)
  if message && RUBY_VERSION < '2.94.0'
    begin
      ::Timeout.timeout(sec) do
        yield
      end
    rescue ::Timeout::Error => e
      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

Private Instance Methods

timeout(sec, klass=nil, message=nil) { || ... } click to toggle source

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.

@param [ Numeric ] sec The number of seconds before timeout. @param [ Class ] klass The exception class to raise on timeout, optional.

When no error exception is provided, Timeout::Error is raised.

@param [ String ] message 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.
# File lib/mongo/timeout.rb, line 30
def timeout(sec, klass=nil, message=nil)
  if message && RUBY_VERSION < '2.94.0'
    begin
      ::Timeout.timeout(sec) do
        yield
      end
    rescue ::Timeout::Error => e
      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