Sha256: f96dfa1efebf57c843bb4b4a68db406f4476a35547a392a876e3a0804ce5b626

Contents?: true

Size: 516 Bytes

Versions: 2

Compression:

Stored size: 516 Bytes

Contents

require 'timeout'

module RestCore
  class Timeout
    def self.members; [:timeout]; end
    include Middleware

    def call env, &k
      return app.call(env, &k) if env[DRY] || timeout(env) == 0
      process(env, &k)
    end

    def process env, &k
      timer = PromisePool::Timer.new(timeout(env), timeout_error)
      app.call(env.merge(TIMER => timer), &k)
    rescue Exception
      timer.cancel
      raise
    end

    def timeout_error
      ::Timeout::Error.new('execution expired')
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rest-core-4.0.1 lib/rest-core/middleware/timeout.rb
rest-core-4.0.0 lib/rest-core/middleware/timeout.rb