Sha256: ccd833d9868c19ed27f6feab0fafef0eaecc85425dc3fb5af7d6668c33d43a85

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

class Knj::Event_filemod
	attr_reader :args
	
	def initialize(args, &block)
		@args = args
		@run = true
		@mutex = Mutex.new
		
		@args[:wait] = 1 if !@args.key?(:wait)
		
		@mtimes = {}
		args[:paths].each do |path|
			@mtimes[path] = File.mtime(path)
		end
		
		Knj::Thread.new do
			while @run do
				break if !@args or !@args[:paths] or @args[:paths].empty?
				
				@mutex.synchronize do
          @args[:paths].each do |path|
            changed = false
            
            if @mtimes and !@mtimes.key?(path) and @mtimes.is_a?(Hash)
              @mtimes[path] = File.mtime(path)
            end
            
            begin
              newdate = File.mtime(path)
            rescue Errno::ENOENT
              #file does not exist.
              changed = true
            end
            
            if !changed and newdate and @mtimes and newdate > @mtimes[path]
              changed = true
            end
            
            if changed
              block.call(self, path)
              @args[:paths].delete(path) if @args and @args[:break_when_changed]
            end
          end
          
          sleep @args[:wait] if @args and @run
        end
			end
		end
	end
	
	def destroy
		@mtimes = {}
		@run = false
		@args = nil
	end
	
	def add_path(fpath)
    @args[:paths] << fpath
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
knjrbfw-0.0.8 lib/knj/event_filemod.rb