Sha256: 4440d00262aebd26a599fe9cbca5c6e207cd48a19f5becfc9f308364ab2e6282

Contents?: true

Size: 1.86 KB

Versions: 23

Compression:

Stored size: 1.86 KB

Contents

require 'listen/file'
require 'listen/directory'

module Listen
  # TODO: rename to Snapshot
  class Change
    # TODO: test this class for coverage
    class Config
      def initialize(queue, silencer)
        @queue = queue
        @silencer = silencer
      end

      def silenced?(path, type)
        @silencer.silenced?(Pathname(path), type)
      end

      def queue(*args)
        @queue << args
      end
    end

    attr_reader :record

    def initialize(config, record)
      @config = config
      @record = record
    end

    # Invalidate some part of the snapshot/record (dir, file, subtree, etc.)
    def invalidate(type, rel_path, options)
      watched_dir = Pathname.new(record.root)

      change = options[:change]
      cookie = options[:cookie]

      if !cookie && config.silenced?(rel_path, type)
        Listen::Logger.debug {  "(silenced): #{rel_path.inspect}" }
        return
      end

      path = watched_dir + rel_path

      Listen::Logger.debug do
        log_details = options[:silence] && 'recording' || change || 'unknown'
        "#{log_details}: #{type}:#{path} (#{options.inspect})"
      end

      if change
        options = cookie ? { cookie: cookie } : {}
        config.queue(type, change, watched_dir, rel_path, options)
      else
        if type == :dir
          # NOTE: POSSIBLE RECURSION
          # TODO: fix - use a queue instead
          Directory.scan(self, rel_path, options)
        else
          change = File.change(record, rel_path)
          return if !change || options[:silence]
          config.queue(:file, change, watched_dir, rel_path)
        end
      end
    rescue RuntimeError => ex
      msg = format(
        '%s#%s crashed %s:%s',
        self.class,
        __method__,
        exinspect,
        ex.backtrace * "\n")
      Listen::Logger.error(msg)
      raise
    end

    private

    attr_reader :config
  end
end

Version data entries

23 entries across 23 versions & 8 rubygems

Version Path
files.com-1.0.55 docs/vendor/bundle/ruby/2.5.0/gems/listen-3.0.8/lib/listen/change.rb
honeybadger-4.5.3 vendor/bundle/ruby/2.6.0/gems/listen-3.0.8/lib/listen/change.rb
vagrant-unbundled-1.8.5.2 vendor/bundle/ruby/2.3.0/gems/listen-3.0.8/lib/listen/change.rb
vagrant-unbundled-1.8.5.1 vendor/bundle/ruby/2.3.0/gems/listen-3.0.8/lib/listen/change.rb
vagrant-unbundled-1.8.4.2 vendor/bundle/ruby/2.3.0/gems/listen-3.0.8/lib/listen/change.rb
vagrant-unbundled-1.8.4.1 vendor/bundle/ruby/2.3.0/gems/listen-3.0.8/lib/listen/change.rb
listen-3.0.8 lib/listen/change.rb
sass-listen-3.0.7 lib/listen/change.rb
listen-3.0.7 lib/listen/change.rb
listen-3.0.6 lib/listen/change.rb
vagrant-unbundled-1.8.1.1 vendor/bundle/ruby/2.3.0/gems/listen-3.0.5/lib/listen/change.rb
listen-3.0.5 lib/listen/change.rb
listen-3.0.4 lib/listen/change.rb
mastermind_adeybee-0.1.4 vendor/bundle/ruby/2.2.0/gems/listen-3.0.3/lib/listen/change.rb
mastermind_adeybee-0.1.3 vendor/bundle/ruby/2.2.0/gems/listen-3.0.3/lib/listen/change.rb
mastermind_adeybee-0.1.2 vendor/bundle/ruby/2.2.0/gems/listen-3.0.3/lib/listen/change.rb
mastermind_adeybee-0.1.1 vendor/bundle/ruby/2.2.0/gems/listen-3.0.3/lib/listen/change.rb
vagrant-cloudstack-1.2.0 vendor/bundle/gems/listen-3.0.3/lib/listen/change.rb
geminfo-0.1.0 path/gems/listen-3.0.3/lib/listen/change.rb
listen-3.0.3 lib/listen/change.rb