Sha256: 98f5fe32a2be350cfa78901dc270d12f4bf02166a3747505cbf4115508f6f7c0

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

require 'listen'
require 'concurrent'

module Alki
  module Reload
    class ListenWatcher
      @listeners = {}

      def self.listener(dirs,reloader)
        @listeners[dirs] ||= Listener.new(dirs,reloader)
      end

      def initialize(reloader,dirs)
        @listener = self.class.listener dirs, reloader
        @started = false
      end

      def start
        unless @started
          @listener.start
          @started = true
        end
      end

      def stop
        if @started
          @listener.stop
          @started = false
        end
      end

      class Listener
        def initialize(dirs,reloader)
          @count = 0
          @listen = Listen.to(*dirs) do |modified, added, removed|
            if @count > 0 && (modified || added || removed)
              reloader.reload
            end
          end
        end

        def start
          if @count == 0
            @listen.start
          end
          @count += 1
        end

        def stop
          @count -= 1
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alki-reload-0.3.4 lib/alki/reload/listen_watcher.rb
alki-reload-0.3.3 lib/alki/reload/listen_watcher.rb