compass/lib/vendor/fssm/state.rb

55 lines
1.1 KiB
Ruby
Raw Normal View History

2009-09-03 05:42:59 +00:00
require 'yaml'
class FSSM::State
def initialize(path)
@path = path
@cache = FSSM::Tree::Cache.new
2009-09-03 05:42:59 +00:00
end
def refresh(base=nil, skip_callbacks=false)
2009-09-03 05:42:59 +00:00
previous, current = recache(base || @path.to_pathname)
unless skip_callbacks
deleted(previous, current)
created(previous, current)
modified(previous, current)
end
end
2009-09-03 05:42:59 +00:00
private
2009-09-03 05:42:59 +00:00
def created(previous, current)
(current.keys - previous.keys).each {|created| @path.create(created)}
end
2009-09-03 05:42:59 +00:00
def deleted(previous, current)
(previous.keys - current.keys).each {|deleted| @path.delete(deleted)}
end
2009-09-03 05:42:59 +00:00
def modified(previous, current)
(current.keys & previous.keys).each do |file|
@path.update(file) if (current[file] <=> previous[file]) != 0
end
end
2009-09-03 05:42:59 +00:00
def recache(base)
base = Pathname.for(base)
previous = @cache.files
snapshot(base)
current = @cache.files
[previous, current]
end
def snapshot(base)
base = Pathname.for(base)
@cache.unset(base)
@path.glob.each {|glob| add_glob(base, glob)}
end
def add_glob(base, glob)
Pathname.glob(base.join(glob).to_s).each do |fn|
2009-09-03 05:42:59 +00:00
@cache.set(fn)
end
end
2009-09-03 05:42:59 +00:00
end