vendor/sass/vendor/fssm/lib/fssm/support.rb in haml-3.1.3 vs vendor/sass/vendor/fssm/lib/fssm/support.rb in haml-3.1.4

- old
+ new

@@ -1,54 +1,83 @@ require 'rbconfig' module FSSM::Support class << self - def backend - @@backend ||= case - when mac? && !jruby? && carbon_core? - 'FSEvents' - when linux? && rb_inotify? - 'Inotify' - else - 'Polling' + def usable_backend + choice = case + when mac? && !lion? && !jruby? && carbon_core? + 'FSEvents' + when mac? && rb_fsevent? + 'RBFSEvent' + when linux? && rb_inotify? + 'Inotify' + else + 'Polling' + end + + if (mac? || linux?) && choice == 'Polling' + optimal = case + when mac? + 'rb-fsevent' + when linux? + 'rb-inotify' + end + FSSM.dbg("An optimized backend is available for this platform!") + FSSM.dbg(" gem install #{optimal}") end + + choice end + def backend + @@backend ||= usable_backend + end + def jruby? defined?(JRUBY_VERSION) end def mac? Config::CONFIG['target_os'] =~ /darwin/i end + def lion? + Config::CONFIG['target_os'] =~ /darwin11/i + end + def linux? Config::CONFIG['target_os'] =~ /linux/i end def carbon_core? begin require 'osx/foundation' OSX.require_framework '/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework' true rescue LoadError - STDERR.puts("Warning: Unable to load CarbonCore. FSEvents will be unavailable.") false end end + def rb_fsevent? + begin + require 'rb-fsevent' + defined?(FSEvent::VERSION) ? FSEvent::VERSION.to_f >= 0.4 : false + rescue LoadError + false + end + end + def rb_inotify? - found = begin + begin require 'rb-inotify' if defined?(INotify::VERSION) version = INotify::VERSION version[0] > 0 || version[1] >= 6 end rescue LoadError false end - STDERR.puts("Warning: Unable to load rb-inotify >= 0.5.1. Inotify will be unavailable.") unless found - found end def use_block(context, block) return if block.nil? if block.arity == 1