class SassListen::Adapter::Windows
Adapter implementation for Windows ‘wdm`.
def self.usable?
def self.usable? return false unless super require 'wdm' true rescue LoadError _log :debug, format('wdm - load failed: %s:%s', $ERROR_INFO, $ERROR_POSITION * "\n") Kernel.warn BUNDLER_DECLARE_GEM false end
def _change(type)
def _change(type) { modified: [:modified, :attrib], # TODO: is attrib really passed? added: [:added, :renamed_new_file], removed: [:removed, :renamed_old_file] }.each do |change, types| return change if types.include?(type) end nil end
def _configure(dir, &callback)
def _configure(dir, &callback) require 'wdm' _log :debug, 'wdm - starting...' @worker ||= WDM::Monitor.new @worker.watch_recursively(dir.to_s, :files) do |change| callback.call([:file, change]) end @worker.watch_recursively(dir.to_s, :directories) do |change| callback.call([:dir, change]) end events = [:attributes, :last_write] @worker.watch_recursively(dir.to_s, *events) do |change| callback.call([:attr, change]) end end
def _process_event(dir, event)
def _process_event(dir, event) _log :debug, "wdm - callback: #{event.inspect}" type, change = event full_path = Pathname(change.path) rel_path = full_path.relative_path_from(dir).to_s options = { change: _change(change.type) } case type when :file _queue_change(:file, dir, rel_path, options) when :attr unless full_path.directory? _queue_change(:file, dir, rel_path, options) end when :dir if change.type == :removed # TODO: check if watched dir? _queue_change(:dir, dir, Pathname(rel_path).dirname.to_s, {}) elsif change.type == :added _queue_change(:dir, dir, rel_path, {}) else # do nothing - changed directory means either: # - removed subdirs (handled above) # - added subdirs (handled above) # - removed files (handled by _file_callback) # - added files (handled by _file_callback) # so what's left? end end rescue details = event.inspect _log :error, format('wdm - callback (%): %s:%s', details, $ERROR_INFO, $ERROR_POSITION * "\n") raise end
def _run
def _run @worker.run! end