From e78f84e1b83aa7d402d669c75f020d152c758c70 Mon Sep 17 00:00:00 2001 From: Gabriel Andretta Date: Sat, 18 Jun 2011 20:22:07 -0300 Subject: [PATCH] enable the reloader in subclasses automatically --- sinatra-contrib/lib/sinatra/reloader.rb | 8 ++++++++ sinatra-contrib/spec/reloader/app.rb.erb | 4 +++- sinatra-contrib/spec/reloader_spec.rb | 24 ++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/sinatra-contrib/lib/sinatra/reloader.rb b/sinatra-contrib/lib/sinatra/reloader.rb index cfd66130..dd21a846 100644 --- a/sinatra-contrib/lib/sinatra/reloader.rb +++ b/sinatra-contrib/lib/sinatra/reloader.rb @@ -218,6 +218,14 @@ module Sinatra stop_registering_extension result end + + # Does everything Sinatra::Base#register does and then registers + # the reloader in the +subclass+. + def inherited(subclass) + result = super + subclass.register Sinatra::Reloader + result + end end # Contains the methods that the extension adds to the Sinatra diff --git a/sinatra-contrib/spec/reloader/app.rb.erb b/sinatra-contrib/spec/reloader/app.rb.erb index eba1b707..0f53d5e2 100644 --- a/sinatra-contrib/spec/reloader/app.rb.erb +++ b/sinatra-contrib/spec/reloader/app.rb.erb @@ -1,6 +1,8 @@ -class <%= name %> < Sinatra::Base +class <%= name %> < <%= parent %> +<% if enable_reloader %> register Sinatra::Reloader enable :reloader +<% end %> <% unless inline_templates.nil? %> enable :inline_templates <% end %> diff --git a/sinatra-contrib/spec/reloader_spec.rb b/sinatra-contrib/spec/reloader_spec.rb index 5de8fc54..acf6870e 100644 --- a/sinatra-contrib/spec/reloader_spec.rb +++ b/sinatra-contrib/spec/reloader_spec.rb @@ -44,6 +44,8 @@ describe Sinatra::Reloader do options[:middlewares] ||= [] options[:filters] ||= [] options[:name] ||= app_name + options[:enable_reloader] = true unless options[:enable_reloader] === false + options[:parent] ||= 'Sinatra::Base' update_file(app_file_path) do |f| template_path = File.expand_path('../reloader/app.rb.erb', __FILE__) @@ -387,4 +389,26 @@ describe Sinatra::Reloader do get('/foo').body.strip.should == 'foo' end end + + it "automatically registers the reloader in the subclases" do + class ::Parent < Sinatra::Base + register Sinatra::Reloader + enable :reloader + end + + setup_example_app( + :routes => ['get("/foo") { "foo" }'], + :enable_reloader => false, + :parent => 'Parent' + ) + + update_app_file( + :routes => ['get("/foo") { "bar" }'], + :enable_reloader => false, + :parent => 'Parent' + ) + + get('/foo').body.should == 'bar' + end + end