# File lib/fssm/state/directory.rb, line 5 def initialize(path, options={}) @path = path @options = options @cache = FSSM::Tree::Cache.new end
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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