class ActionView::CacheExpiry::ViewModificationWatcher

def all_view_paths

def all_view_paths
  ActionView::ViewPaths.all_view_paths.flat_map(&:paths)
end

def dirs_to_watch

def dirs_to_watch
  all_view_paths.grep(FileSystemResolver).map!(&:path).tap(&:uniq!).sort!
end

def execute_if_updated

def execute_if_updated
  @mutex.synchronize do
    watched_dirs = dirs_to_watch
    return if watched_dirs.empty?
    if watched_dirs != @watched_dirs
      @watched_dirs = watched_dirs
      @watcher = @watcher_class.new([], watched_dirs, &@block)
      @watcher.execute
    else
      @watcher.execute_if_updated
    end
  end
end

def initialize(watcher:, &block)

def initialize(watcher:, &block)
  @watched_dirs = nil
  @watcher_class = watcher
  @watcher = nil
  @mutex = Mutex.new
  @block = block
end