Sha256: e60033dfb531562345d1a4edbb0ab83a47b14816ef64b1bc0c7a07e89cde8ffd

Contents?: true

Size: 988 Bytes

Versions: 6

Compression:

Stored size: 988 Bytes

Contents

class FSSM::State
  def initialize(path, preload=true)
    @path = path
    @snapshot = {}
    snapshot if preload
  end
  
  def refresh
    previous = @snapshot
    current = snapshot
    
    deleted(previous, current)
    created(previous, current)
    modified(previous, current)    
  end
  
  private
  
  def created(previous, current)
    (current.keys - previous.keys).each {|created| @path.create(created)}
  end
  
  def deleted(previous, current)
    (previous.keys - current.keys).each {|deleted| @path.delete(deleted)}
  end
  
  def modified(previous, current)
    (current.keys & previous.keys).each do |file|
      @path.update(file) if (current[file] <=> previous[file]) != 0
    end
  end
  
  def snapshot
    snap = {}
    @path.glob.each {|glob| add_glob(snap, glob)}
    @snapshot = snap
  end
  
  def add_glob(snap, glob)
    Pathname.glob(@path.to_pathname.join(glob)).each do |fn|
      next unless fn.file?
      snap["#{fn}"] = fn.mtime
    end
  end
  
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
chriseppstein-compass-0.8.13 lib/vendor/fssm/state.rb
compass-edge-0.9.4 lib/vendor/fssm/state.rb
compass-edge-0.9.3 lib/vendor/fssm/state.rb
compass-edge-0.9.2 lib/vendor/fssm/state.rb
compass-edge-0.9.1 lib/vendor/fssm/state.rb
compass-edge-0.10.0.pre lib/vendor/fssm/state.rb