class Listen::Record::Entry
Represents a directory entry (dir or file)
def _entries(dir)
def _entries(dir) return Dir.entries(dir) unless RUBY_ENGINE == 'jruby' # JRuby inconsistency workaround, see: # https://github.com/jruby/jruby/issues/3840 exists = ::File.exist?(dir) directory = ::File.directory?(dir) return Dir.entries(dir) unless exists && !directory raise Errno::ENOTDIR, dir end
def _join
def _join args = [@relative, @name].compact args.empty? ? nil : ::File.join(*args) end
def children
def children child_relative = _join (_entries(sys_path) - %w[. ..]).map do |name| Entry.new(@root, child_relative, name) end end
def initialize(root, relative, name = nil)
file: "/home/me/watched_dir", "app/models", "foo.rb"
def initialize(root, relative, name = nil) @root = root @relative = relative @name = name end
def meta
def meta lstat = ::File.lstat(sys_path) { mtime: lstat.mtime.to_f, mode: lstat.mode, size: lstat.size } end
def real_path
def real_path @real_path ||= ::File.realpath(sys_path) end
def record_dir_key
if @record["/home/me/watched_dir"]["project/app"]["models"]
if @record["/home/me/watched_dir"]["project/app/models"]["foo.rb"]
record hash is e.g.
def record_dir_key ::File.join(*[@relative, @name].compact) end
def sys_path
def sys_path # Use full path in case someone uses chdir ::File.join(*[@root, @relative, @name].compact) end