class INotify::Watcher

is to be able to disable them using {#close}.
The main purpose of having Watcher objects
via {Notifier#run #run} or {Notifier#process #process}.
The Notifier actually takes care of the checking for events,
One {Notifier} may have many {Watcher}s.
A watcher is usually created via {Notifier#watch}.
specified by {INotify::Notifier#watch event flags}.
Watchers monitor a single path for changes,

def callback!(event)

Parameters:
  • event (Event) --

Other tags:
    Private: -
def callback!(event)
  @callback[event]
end

def close

Raises:
  • (SystemCallError) - if the watch fails to be disabled for some reason
def close
  if Native.inotify_rm_watch(@notifier.fd, @id) == 0
    @notifier.watchers.delete(@id)
    return
  end
  raise SystemCallError.new("Failed to stop watching #{path.inspect}",
                            FFI.errno)
end

def initialize(notifier, path, *flags, &callback)

Other tags:
    See: Notifier#watch -

Other tags:
    Private: -
def initialize(notifier, path, *flags, &callback)
  @notifier = notifier
  @callback = callback || proc {}
  @path = path
  @flags = flags.freeze
  @id = Native.inotify_add_watch(@notifier.fd, path.dup,
    Native::Flags.to_mask(flags))
  unless @id < 0
    @notifier.watchers[@id] = self
    return
  end
  raise SystemCallError.new(
    "Failed to watch #{path.inspect}" +
    case FFI.errno
    when Errno::EACCES::Errno; ": read access to the given file is not permitted."
    when Errno::EBADF::Errno; ": the given file descriptor is not valid."
    when Errno::EFAULT::Errno; ": path points outside of the process's accessible address space."
    when Errno::EINVAL::Errno; ": the given event mask contains no legal events; or fd is not an inotify file descriptor."
    when Errno::ENOMEM::Errno; ": insufficient kernel memory was available."
    when Errno::ENOSPC::Errno; ": The user limit on the total number of inotify watches was reached or the kernel failed to allocate a needed resource."
    else; ""
    end,
    FFI.errno)
end