class Staticme::Events::Emitters::FileChanged
Attributes
_broadcast_tail[RW]
fsevent[RW]
Public Class Methods
new()
click to toggle source
# File lib/staticme/events/emitters/file_changed.rb, line 16 def initialize self.fsevent = FSEvent.new self._broadcast_tail = Hash.new end
Public Instance Methods
bind!()
click to toggle source
# File lib/staticme/events/emitters/file_changed.rb, line 21 def bind! params = Staticme.params Staticme.on(:fs_changed) do Staticme.broadcast(:event => 'fs_change') end.on(:staticme_terminated) do self.stop! end fsevent.watch params[:path] do |dirs| signature = get_signature(dirs) next if already_broadcasted?(signature) tail_broadcast(signature) Staticme.logger.info 'FS change, publishing the event.' Staticme.emit(:fs_changed, dirs) end Thread.abort_on_exception = true Thread.new do fsevent.run end end
stop!()
click to toggle source
# File lib/staticme/events/emitters/file_changed.rb, line 47 def stop! fsevent.stop end
Protected Instance Methods
already_broadcasted?(signature)
click to toggle source
# File lib/staticme/events/emitters/file_changed.rb, line 57 def already_broadcasted?(signature) !self._broadcast_tail[signature].nil? end
get_signature(params)
click to toggle source
# File lib/staticme/events/emitters/file_changed.rb, line 53 def get_signature(params) Digest::MD5.hexdigest(params.to_s) end
tail_broadcast(signature)
click to toggle source
# File lib/staticme/events/emitters/file_changed.rb, line 61 def tail_broadcast(signature) self._broadcast_tail[signature] = true # fsevent triggers 2 events in a row # just a simple filtering EM.add_timer 1 do self._broadcast_tail.delete(signature) end end