Module: Sinatra::Reloader
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Classes:
| |
Defined in: | sinatra-contrib/lib/sinatra/reloader.rb |
Overview
DEPRECATED: Please consider using an alternative like rerun or rack-unreloader instead.
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.
Usage
Classic Application
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...
Modular Application
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
Using the Reloader in Other Environments
By default, the reloader is only enabled for the development environment. Similar to registering the reloader in a modular application, a classic application requires manually enabling the extension for it to be available in a non-development environment.
require "sinatra"
require "sinatra/reloader"
configure :production do
enable :reloader
end
Changing the Reloading Policy
You can refine the reloading policy with also_reload
and
dont_reload
, to customize which files should, and should not, be
reloaded, respectively. You can also use #after_reload to execute a
block after any file being reloaded.
Classic Application
Simply call the methods:
require "sinatra"
require "sinatra/reloader" if development?
also_reload '/path/to/some/file'
dont_reload '/path/to/other/file'
after_reload do
puts 'reloaded'
end
# Your classic application code goes here...
Modular Application
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'
after_reload do
puts 'reloaded'
end
end
# Your modular application code goes here...
end
Constant Summary
-
MUTEX_FOR_PERFORM =
# File 'sinatra-contrib/lib/sinatra/reloader.rb', line 216Mutex.new
Class Method Summary
-
.perform(klass)
Reloads the modified files, adding, updating and removing the needed elements.
-
.registered(klass)
When the extension is registered it extends the
::Sinatra
applicationklass
with the modulesBaseMethods
andExtensionMethods
and defines a before filter to .perform the reload of the modified files.
Instance Method Summary
Class Method Details
.perform(klass)
Reloads the modified files, adding, updating and removing the needed elements.
# File 'sinatra-contrib/lib/sinatra/reloader.rb', line 247
def self.perform(klass) reloaded_paths = [] 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) } # Deletes all old elements. watcher.elements.delete_if { true } $LOADED_FEATURES.delete(watcher.path) require watcher.path watcher.update reloaded_paths << watcher.path end return if reloaded_paths.empty? @@after_reload.each do |block| block.arity.zero? ? block.call : block.call(reloaded_paths) end # Prevents after_reload from increasing each time it's reloaded. @@after_reload.delete_if do |blk| path, = blk.source_location path && reloaded_paths.include?(path) end end
.registered(klass)
When the extension is registered it extends the ::Sinatra
application
klass
with the modules Reloader::BaseMethods
and Reloader::ExtensionMethods
and
defines a before filter to .perform the reload of the modified files.
# File 'sinatra-contrib/lib/sinatra/reloader.rb', line 227
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? MUTEX_FOR_PERFORM.synchronize { Reloader.perform(klass) } end end klass.set(:inline_templates, klass.app_file) if klass == Sinatra::Application end
Instance Method Details
#after_reload(&block)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/reloader.rb', line 220
def after_reload(&block) @@after_reload << block end