Sha256: 1943193aabbbce84d7b9507f75ff46999db58895bd75134e9fb46e58c8dd1c78

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents


module Sidekick::Triggers::Watch

  def self.new(*args)
    case ::Sidekick::Helpers.platform
      when :linux then Polling
      when :darwin then Polling
      else Polling
    end.new(*args)
  end

  class Polling

    def initialize(callback, glob, ignore_first=false)
      ::Sidekick::Triggers.log "polling #{glob} for file changes.."
      @path = glob
      @file_timestamps = {}
      @callback = callback
      read_changes if ignore_first # prebuild cache
    end

    def poll
      if changed?
        ::Sidekick::Triggers.log "modified #{@changes.inspect}"
        @callback.call(@changes)
      end
    end

    private

      def changed?
        read_changes
        !@changes.empty?
      end

      def read_changes
        @changes = []
        Dir[@path].each do |path|
          mtime = File.new('./' + path).mtime
          unless @file_timestamps[path] == mtime
            @changes << path
            @file_timestamps[path] = mtime
          end
        end
      end
  end

# TODO inotify and mac support



end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sidekick-0.2.0 lib/sidekick/triggers/watch.rb