forked from guard/listen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
polling.rb
39 lines (33 loc) · 1008 Bytes
/
polling.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# frozen_string_literal: true
module Listen
module Adapter
# Polling Adapter that works cross-platform and
# has no dependencies. This is the adapter that
# uses the most CPU processing power and has higher
# file IO than the other implementations.
#
class Polling < Base
OS_REGEXP = // # match every OS
DEFAULTS = { latency: 1.0, wait_for_delay: 0.05 }.freeze
private
def _configure(_, &callback)
@polling_callbacks ||= []
@polling_callbacks << callback
end
def _run
loop do
start = Time.now.to_f
@polling_callbacks.each do |callback|
callback.call(nil)
nap_time = options.latency - (Time.now.to_f - start)
# TODO: warn if nap_time is negative (polling too slow)
sleep(nap_time) if nap_time > 0
end
end
end
def _process_event(dir, _)
_queue_change(:dir, dir, '.', recursive: true)
end
end
end
end