forked from guard/listen
/
listen.rb
55 lines (49 loc) · 1.59 KB
/
listen.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# frozen_string_literal: true
require 'logger'
require 'weakref'
require 'listen/logger'
require 'listen/listener'
# Always set up logging by default first time file is required
#
# NOTE: If you need to clear the logger completely, do so *after*
# requiring this file. If you need to set a custom logger,
# require the listen/logger file and set the logger before requiring
# this file.
Listen.setup_default_logger_if_unset
# Won't print anything by default because of level - unless you've set
# LISTEN_GEM_DEBUGGING or provided your own logger with a high enough level
Listen::Logger.info "Listen loglevel set to: #{Listen.logger.level}"
Listen::Logger.info "Listen version: #{Listen::VERSION}"
module Listen
@listeners = Queue.new
class << self
# Listens to file system modifications on a either single directory or
# multiple directories.
#
# @param (see Listen::Listener#new)
#
# @yield [modified, added, removed] the changed files
# @yieldparam [Array<String>] modified the list of modified files
# @yieldparam [Array<String>] added the list of added files
# @yieldparam [Array<String>] removed the list of removed files
#
# @return [Listen::Listener] the listener
#
def to(*args, &block)
Listener.new(*args, &block).tap do |listener|
@listeners.enq(WeakRef.new(listener))
end
end
# This is used by the `listen` binary to handle Ctrl-C
#
def stop
while (listener = @listeners.deq(true))
begin
listener.stop
rescue WeakRef::RefError
end
end
rescue ThreadError
end
end
end