Module: Rack::Reloader::Stat

Defined in:
lib/rack/reloader.rb

Instance Method Summary collapse

Instance Method Details

#figure_path(file, paths) ⇒ Object

Takes a relative or absolute file name, a couple possible paths that the file might reside in. Returns the full path and File::Stat for the path.


86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/rack/reloader.rb', line 86

def figure_path(file, paths)
  found = @cache[file]
  found = file if !found and Pathname.new(file).absolute?
  found, stat = safe_stat(found)
  return found, stat if found

  paths.find do |possible_path|
    path = ::File.join(possible_path, file)
    found, stat = safe_stat(path)
    return ::File.expand_path(found), stat if found
  end

  return false, false
end

#rotationObject


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/rack/reloader.rb', line 67

def rotation
  files = [$0, *$LOADED_FEATURES].uniq
  paths = ['./', *$LOAD_PATH].uniq

  files.map{|file|
    next if file =~ /\.(so|bundle)$/ # cannot reload compiled files

    found, stat = figure_path(file, paths)
    next unless found && stat && mtime = stat.mtime

    @cache[file] = found

    yield(found, mtime)
  }.compact
end

#safe_stat(file) ⇒ Object


101
102
103
104
105
106
107
# File 'lib/rack/reloader.rb', line 101

def safe_stat(file)
  return unless file
  stat = ::File.stat(file)
  return file, stat if stat.file?
rescue Errno::ENOENT, Errno::ENOTDIR, Errno::ESRCH
  @cache.delete(file) and false
end