Extension to reload modified files. Useful during development, since it will automatically require files defining routes, filters, error handlers and inline templates, with every incoming request, but only if they have been updated.
To enable the reloader in a classic application all you need to do is require it:
require "sinatra" require "sinatra/reloader" if development? # Your classic application code goes here...
To enable the reloader in a modular application all you need to do is require it, and then, register it:
require "sinatra/base"
require "sinatra/reloader"
class MyApp < Sinatra::Base
configure :development do
register Sinatra::Reloader
end
# Your modular application code goes here...
end
You can refine the reloading policy with also_reload and dont_reload, to customize which files should, and should not, be reloaded, respectively.
Simply call the methods:
require "sinatra" require "sinatra/reloader" if development? also_reload '/path/to/some/file' dont_reload '/path/to/other/file' # Your classic application code goes here...
Call the methods inside the configure block:
require "sinatra/base"
require "sinatra/reloader"
class MyApp < Sinatra::Base
configure :development do
register Sinatra::Reloader
also_reload '/path/to/some/file'
dont_reload '/path/to/other/file'
end
# Your modular application code goes here...
end
Reloads the modified files, adding, updating and removing the needed elements.
# File lib/sinatra/reloader.rb, line 218 def self.perform(klass) Watcher::List.for(klass).updated.each do |watcher| klass.set(:inline_templates, watcher.path) if watcher.inline_templates? watcher.elements.each { |element| klass.deactivate(element) } $LOADED_FEATURES.delete(watcher.path) require watcher.path watcher.update end end
When the extension is registed it extends the Sinatra application klass with the modules BaseMethods and ExtensionMethods and defines a before filter to perform the reload of the modified files.
# File lib/sinatra/reloader.rb, line 194 def self.registered(klass) @reloader_loaded_in ||= {} return if @reloader_loaded_in[klass] @reloader_loaded_in[klass] = true klass.extend BaseMethods klass.extend ExtensionMethods klass.set(:reloader) { klass.development? } klass.set(:reload_templates) { klass.reloader? } klass.before do if klass.reloader? if Reloader.thread_safe? Thread.exclusive { Reloader.perform(klass) } else Reloader.perform(klass) end end end klass.set(:inline_templates, klass.app_file) if klass == Sinatra::Application end
Generated with the Darkfish Rdoc Generator 2.