Module: Wikimelon::Throttle

Defined in:
lib/wikimelon/throttle.rb

Overview

Enforces a minimum interval between outgoing requests when Wikimelon.request_interval is set (in seconds). Thread-safe.

Class Method Summary collapse

Class Method Details

.nowObject



27
28
29
# File 'lib/wikimelon/throttle.rb', line 27

def self.now
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
end

.reset!Object



23
24
25
# File 'lib/wikimelon/throttle.rb', line 23

def self.reset!
  @mutex.synchronize { @last_request_at = nil }
end

.wait!Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/wikimelon/throttle.rb', line 10

def self.wait!
  interval = Wikimelon.request_interval.to_f
  return if interval <= 0

  @mutex.synchronize do
    if @last_request_at
      elapsed = now - @last_request_at
      sleep(interval - elapsed) if elapsed < interval
    end
    @last_request_at = now
  end
end