class FSSM::State::Directory

Attributes

path[R]

Public Class Methods

new(path, options={}) click to toggle source
# File lib/fssm/state/directory.rb, line 5
def initialize(path, options={})
  @path    = path
  @options = options
  @cache   = FSSM::Tree::Cache.new
end

Public Instance Methods

refresh(base=nil, skip_callbacks=false) click to toggle source
# File lib/fssm/state/directory.rb, line 11
def refresh(base=nil, skip_callbacks=false)
  base_path = FSSM::Pathname.for(base || @path.to_pathname).expand_path
  previous, current = recache(base_path)

  unless skip_callbacks
    deleted(previous, current)
    created(previous, current)
    modified(previous, current)
  end
end

Private Instance Methods

add_glob(base, glob) click to toggle source
# File lib/fssm/state/directory.rb, line 57
def add_glob(base, glob)
  FSSM::Pathname.glob(base.join(glob).to_s).each do |fn|
    @cache.set(fn)
  end
end
cache_entries() click to toggle source
# File lib/fssm/state/directory.rb, line 63
def cache_entries
  entries = tag_entries(@cache.files, :file)
  entries.merge! tag_entries(@cache.directories, :directory) if @options[:directories]
  entries
end
created(previous, current) click to toggle source
# File lib/fssm/state/directory.rb, line 24
def created(previous, current)
  (current.keys - previous.keys).sort.each do |file|
    @path.create(file, current[file][1])
  end
end
deleted(previous, current) click to toggle source
# File lib/fssm/state/directory.rb, line 30
def deleted(previous, current)
  (previous.keys - current.keys).sort.reverse.each do |file|
    @path.delete(file, previous[file][1])
  end
end
modified(previous, current) click to toggle source
# File lib/fssm/state/directory.rb, line 36
def modified(previous, current)
  (current.keys & previous.keys).each do |file|
    current_data = current[file]
    @path.update(file, current_data[1]) if (current_data[0] <=> previous[file][0]) != 0
  end
end
recache(base) click to toggle source
# File lib/fssm/state/directory.rb, line 43
def recache(base)
  base     = FSSM::Pathname.for(base)
  previous = cache_entries
  snapshot(base)
  current = cache_entries
  [previous, current]
end
snapshot(base) click to toggle source
# File lib/fssm/state/directory.rb, line 51
def snapshot(base)
  base = FSSM::Pathname.for(base)
  @cache.unset(base)
  @path.glob.each { |glob| add_glob(base, glob) }
end
tag_entries(entries, tag) click to toggle source
# File lib/fssm/state/directory.rb, line 69
def tag_entries(entries, tag)
  tagged_entries = {}
  entries.each_pair { |fname, mtime| tagged_entries[fname] = [mtime, tag] }
  tagged_entries
end