lib/vendor/fssm.rb in compass-0.10.0.pre3 vs lib/vendor/fssm.rb in compass-0.10.0.pre4
- old
+ new
@@ -1,176 +1,40 @@
-module FSSM::Tree
- module NodeBase
- def initialize
- @children = {}
- end
+dir = File.dirname(__FILE__)
+$LOAD_PATH.unshift dir unless $LOAD_PATH.include?(dir)
- protected
+module FSSM
+ FileNotFoundError = Class.new(StandardError)
+ CallbackError = Class.new(StandardError)
- def child(segment)
- @children["#{segment}"]
+ class << self
+ def dbg(msg=nil)
+ STDERR.puts(msg)
end
- def child!(segment)
- (@children["#{segment}"] ||= Node.new)
- end
+ def monitor(*args, &block)
+ monitor = FSSM::Monitor.new
+ context = args.empty? ? monitor : monitor.path(*args)
- def has_child?(segment)
- @children.has_key?("#{segment}")
- end
-
- def remove_child(segment)
- @children.delete("#{segment}")
- end
-
- def remove_children
- @children.clear
- end
- end
-
- module NodeEnumerable
- include NodeBase
- include Enumerable
-
- def each(prefix=nil, &block)
- @children.each do |segment, node|
- cprefix = prefix ?
- FSSM::Pathname.for(prefix).join(segment) :
- FSSM::Pathname.for(segment)
- block.call([cprefix, node])
- node.each(cprefix, &block)
+ if block_given?
+ if block.arity == 1
+ block.call(context)
+ else
+ context.instance_eval(&block)
+ end
end
- end
- end
- module NodeInsertion
- include NodeBase
-
- def unset(path)
- key = key_segments(path)
-
- if key.empty?
- remove_children
- return nil
- end
-
- segment = key.pop
- node = descendant(key)
-
- return unless node
-
- node.remove_child(segment)
-
- nil
+ monitor.run
end
-
- def set(path)
- node = descendant!(path)
- node.from_path(path).mtime
- end
-
- protected
-
- def key_segments(key)
- return key if key.is_a?(Array)
- FSSM::Pathname.for(key).segments
- end
-
- def descendant(path)
- recurse(path, false)
- end
-
- def descendant!(path)
- recurse(path, true)
- end
-
- def recurse(key, create=false)
- key = key_segments(key)
- node = self
-
- until key.empty?
- segment = key.shift
- node = create ? node.child!(segment) : node.child(segment)
- return nil unless node
- end
-
- node
- end
end
+end
- module CacheDebug
- def set(path)
- FSSM.dbg("Cache#set(#{path})")
- super
- end
+require 'thread'
- def unset(path)
- FSSM.dbg("Cache#unset(#{path})")
- super
- end
+require 'fssm/pathname'
+require 'fssm/support'
+require 'fssm/tree'
+require 'fssm/path'
+require 'fssm/state'
+require 'fssm/monitor'
- def ftype(ft)
- FSSM.dbg("Cache#ftype(#{ft})")
- super
- end
- end
-
- class Node
- include NodeBase
- include NodeEnumerable
-
- attr_accessor :mtime
- attr_accessor :ftype
-
- def <=>(other)
- return unless other.is_a?(::FSSM::Tree::Node)
- self.mtime <=> other.mtime
- end
-
- def from_path(path)
- path = FSSM::Pathname.for(path)
- @ftype = path.ftype
- # this handles bad symlinks without failing. why handle bad symlinks at
- # all? well, we could still be interested in their creation and deletion.
- @mtime = path.symlink? ? Time.at(0) : path.mtime
- self
- end
- end
-
- class Cache
- include NodeBase
- include NodeEnumerable
- include NodeInsertion
- include CacheDebug if $DEBUG
-
- def set(path)
- # all paths set from this level need to be absolute
- # realpath will fail on broken links
- path = FSSM::Pathname.for(path).expand_path
- super(path)
- end
-
- def files
- ftype('file')
- end
-
- def directories
- ftype('directory')
- end
-
- def links
- ftype('link')
- end
-
- alias symlinks links
-
- private
-
- def ftype(ft)
- inject({}) do |hash, (path, node)|
- hash["#{path}"] = node.mtime if node.ftype == ft
- hash
- end
- end
- end
-
-end
+require "fssm/backends/#{FSSM::Support.backend.downcase}"
+FSSM::Backends::Default = FSSM::Backends.const_get(FSSM::Support.backend)