# frozen_string_literal: true gem "listen", "~> 3.5" require "listen" require "set" require "pathname" require "concurrent/atomic/atomic_boolean" module ActiveSupport # Allows you to "listen" to changes in a file system. # The evented file updater does not hit disk when checking for updates. # Instead, it uses platform-specific file system events to trigger a change # in state. # # The file checker takes an array of files to watch or a hash specifying directories # and file extensions to watch. It also takes a block that is called when # EventedFileUpdateChecker#execute is run or when EventedFileUpdateChecker#execute_if_updated # is run and there have been changes to the file system. # # Example: # # checker = ActiveSupport::EventedFileUpdateChecker.new(["/tmp/foo"]) { puts "changed" } # checker.updated? # # => false # checker.execute_if_updated # # => nil # # FileUtils.touch("/tmp/foo") # # checker.updated? # # => true # checker.execute_if_updated # # => "changed" # class EventedFileUpdateChecker # :nodoc: all def initialize(files, dirs = {}, &block) unless block raise ArgumentError, "A block is required to initialize an EventedFileUpdateChecker" end @block = block @core = Core.new(files, dirs) ObjectSpace.define_finalizer(self, @core.finalizer) end def inspect "#