Module: SafeRequestTimeout::Hooks

Defined in:
lib/safe_request_timeout/hooks.rb

Overview

Hooks into other classes from other libraries with timeout blocks. This allows timeouts to be automatically checked before making requests to external services.

Class Method Summary collapse

Class Method Details

.add_timeout!(klass, methods, module_name = nil) ⇒ Object

Hooks into a class by surrounding specified instance methods with timeout checks.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/safe_request_timeout/hooks.rb', line 12

def add_timeout!(klass, methods, module_name = nil)
  hooks_module = create_module(klass, module_name, "AddTimeout")

  Array(methods).each do |method_name|
    next if hooks_module.method_defined?(method_name)

    hooks_module.class_eval <<~RUBY, __FILE__, __LINE__ + 1
      def #{method_name}(#{splat_args})
        SafeRequestTimeout.check_timeout!
        super(#{splat_args})
      end
    RUBY
  end

  klass.prepend(hooks_module)
end

.clear_timeout!(klass, methods, module_name = nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/safe_request_timeout/hooks.rb', line 29

def clear_timeout!(klass, methods, module_name = nil)
  hooks_module = create_module(klass, module_name, "ClearTimeout")

  Array(methods).each do |method_name|
    next if hooks_module.method_defined?(method_name)

    hooks_module.class_eval <<~RUBY, __FILE__, __LINE__ + 1
      def #{method_name}(#{splat_args})
        result = super(#{splat_args})
        SafeRequestTimeout.clear_timeout
        result
      end
    RUBY
  end

  klass.prepend(hooks_module)
end