def self.select_and_initialize(directories, options = {}, &callback)
return Adapters::Polling.new(directories, options, &callback) if options.delete(:force_polling)
warning = ''
begin
if Adapters::Darwin.usable_and_works?(directories, options)
return Adapters::Darwin.new(directories, options, &callback)
elsif Adapters::Linux.usable_and_works?(directories, options)
return Adapters::Linux.new(directories, options, &callback)
elsif Adapters::BSD.usable_and_works?(directories, options)
return Adapters::BSD.new(directories, options, &callback)
elsif Adapters::Windows.usable_and_works?(directories, options)
return Adapters::Windows.new(directories, options, &callback)
end
rescue DependencyManager::Error => e
warning += e.message + "\n" + MISSING_DEPENDENCY_MESSAGE
end
unless options[:polling_fallback_message] == false
warning += options[:polling_fallback_message] || POLLING_FALLBACK_MESSAGE
Kernel.warn "[Listen warning]:\n" + warning.gsub(/^(.*)/, ' \1')
end
Adapters::Polling.new(directories, options, &callback)
end