Class: Listen::Change

Inherits:
Object
  • Object
show all
Defined in:
lib/listen/change.rb

Overview

TODO: rename to Snapshot

Defined Under Namespace

Classes: Config

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config, record) ⇒ Change

Returns a new instance of Change.



25
26
27
28
# File 'lib/listen/change.rb', line 25

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

Instance Attribute Details

#recordObject (readonly)

Returns the value of attribute record.



23
24
25
# File 'lib/listen/change.rb', line 23

def record
  @record
end

Instance Method Details

#invalidate(type, rel_path, options) ⇒ Object

Invalidate some part of the snapshot/record (dir, file, subtree, etc.)



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/listen/change.rb', line 31

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)
  elsif 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
rescue RuntimeError => ex
  msg = format(
    '%s#%s crashed %s:%s',
    self.class,
    __method__,
    exinspect,
    ex.backtrace * "\n")
  Listen::Logger.error(msg)
  raise
end