Class: Driskell::Listen::Change

Inherits:
Object
  • Object
show all
Defined in:
lib/driskell-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/driskell-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/driskell-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
71
72
73
74
# File 'lib/driskell-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)
    Driskell::Listen::Logger.debug {  "(silenced): #{rel_path.inspect}" }
    return
  end

  path = watched_dir + rel_path

  Driskell::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 == :tree
      # Invalid the entire directory tree
      Directory.scan(self, rel_path, **options, recurse: true)
    elsif type == :dir
      # Invalid directory contents, but do not recurse
      Directory.scan(self, rel_path, **options, recurse: false)
    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")
  Driskell::Listen::Logger.error(msg)
  raise
end