defremove_constant(const, base =nil)
parts = const.to_s.split("::")
base ||= parts.size ==1?Object: parts[0..-2].join("::").to_const
object = parts[-1].intern
puts "Removing #{const} -- #{object} from #{base}"
base.send(:remove_const, object)enddefreloadreturnunless@@merb_opts[:reloader]==true# First we collect all files in the project (this will also grab newly added files)
project_files =MERB_PATHS.map {|path|Dir[MERB_ROOT+ path]}.flatten.uniq
project_mtime = max_mtime project_files # Latest changed time of all project files
returnunless@mtime< project_mtime # Only continue if a file has changed
project_files.each do |file|if max_mtime(file.to_a)>=@mtime# If the file has changed or been added since the last project reload time
# remove any cannonical constants, based on what type of project file it is
constant = file =~/\/(controllers|models|mailers|helpers|parts)\/(.*).rb/?$2.to_const_string :nil
remove_constant($2.to_const_string,($1=="helpers")?Merb:nil)
load file and puts "loaded file: #{file}"endend@mtime= project_mtime # As the last action, update the current @mtime
end