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