class HTTPX::Timers

  1. lib/httpx/timers.rb
Superclass: Object

Methods

Public Class

  1. new

Public Instance

  1. after
  2. fire
  3. wait_interval

Public Class methods

new()
[show source]
  # File lib/httpx/timers.rb
5 def initialize
6   @intervals = []
7 end

Public Instance methods

after(interval_in_secs, cb = nil, &blk)
[show source]
   # File lib/httpx/timers.rb
 9 def after(interval_in_secs, cb = nil, &blk)
10   callback = cb || blk
11 
12   raise Error, "timer must have a callback" unless callback
13 
14   # I'm assuming here that most requests will have the same
15   # request timeout, as in most cases they share common set of
16   # options. A user setting different request timeouts for 100s of
17   # requests will already have a hard time dealing with that.
18   unless (interval = @intervals.bsearch { |t| t.interval == interval_in_secs })
19     interval = Interval.new(interval_in_secs)
20     @intervals << interval
21     @intervals.sort!
22   end
23 
24   interval << callback
25 
26   @next_interval_at = nil
27 
28   Timer.new(interval, callback)
29 end
fire(error = nil)
[show source]
   # File lib/httpx/timers.rb
41 def fire(error = nil)
42   raise error if error && error.timeout != @intervals.first
43   return if @intervals.empty? || !@next_interval_at
44 
45   elapsed_time = Utils.elapsed_time(@next_interval_at)
46 
47   drop_elapsed!(elapsed_time)
48 
49   @intervals = @intervals.drop_while { |interval| interval.elapse(elapsed_time) <= 0 }
50 
51   @next_interval_at = nil if @intervals.empty?
52 end
wait_interval()
[show source]
   # File lib/httpx/timers.rb
31 def wait_interval
32   drop_elapsed!
33 
34   return if @intervals.empty?
35 
36   @next_interval_at = Utils.now
37 
38   @intervals.first.interval
39 end