Class: RailsLiveReload::Watcher
- Inherits:
-
Object
- Object
- RailsLiveReload::Watcher
- Defined in:
- lib/rails_live_reload/watcher.rb
Instance Attribute Summary collapse
-
#files ⇒ Object
readonly
Returns the value of attribute files.
-
#sockets ⇒ Object
readonly
Returns the value of attribute sockets.
Class Method Summary collapse
Instance Method Summary collapse
- #build_tree ⇒ Object
-
#initialize ⇒ Watcher
constructor
A new instance of Watcher.
- #reload_all ⇒ Object
- #root ⇒ Object
- #start_listener ⇒ Object
- #start_socket ⇒ Object
Constructor Details
#initialize ⇒ Watcher
Returns a new instance of Watcher.
14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/rails_live_reload/watcher.rb', line 14 def initialize @files = {} @sockets = [] puts "Watching: #{root}" RailsLiveReload.patterns.each do |pattern, rule| puts " #{pattern} => #{rule}" end build_tree start_socket start_listener end |
Instance Attribute Details
#files ⇒ Object (readonly)
Returns the value of attribute files.
3 4 5 |
# File 'lib/rails_live_reload/watcher.rb', line 3 def files @files end |
#sockets ⇒ Object (readonly)
Returns the value of attribute sockets.
3 4 5 |
# File 'lib/rails_live_reload/watcher.rb', line 3 def sockets @sockets end |
Class Method Details
.init ⇒ Object
9 10 11 12 |
# File 'lib/rails_live_reload/watcher.rb', line 9 def Watcher.init watcher = new RailsLiveReload.watcher = watcher end |
Instance Method Details
#build_tree ⇒ Object
41 42 43 44 45 |
# File 'lib/rails_live_reload/watcher.rb', line 41 def build_tree Dir.glob(File.join(root, '**', '*')).select{|file| File.file?(file)}.each do |file| files[file] = File.mtime(file).to_i rescue nil end end |
#reload_all ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/rails_live_reload/watcher.rb', line 47 def reload_all data = { event: RailsLiveReload::INTERNAL[:socket_events][:reload], files: files }.to_json @sockets.each do |socket, _| socket.puts data end end |
#root ⇒ Object
5 6 7 |
# File 'lib/rails_live_reload/watcher.rb', line 5 def root RailsLiveReload.config.root_path end |
#start_listener ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/rails_live_reload/watcher.rb', line 28 def start_listener Thread.new do listener = Listen.to(root) do |modified, added, removed| all = modified + added + removed all.each do |file| files[file] = File.mtime(file).to_i rescue nil end reload_all end listener.start end end |
#start_socket ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/rails_live_reload/watcher.rb', line 58 def start_socket Thread.new do Socket.unix_server_socket(RailsLiveReload.config.socket_path.to_s) do |sock| loop do socket, _ = sock.accept sockets << socket Thread.new do begin socket.eof ensure socket.close sockets.delete socket end end end end end end |