From de6d6d665785c8e4c2198f5f65c315a55f9deb96 Mon Sep 17 00:00:00 2001 From: Ryan Tomayko Date: Thu, 28 Jan 2010 07:53:42 -0800 Subject: [PATCH] Base enables static by default if public is set and exists --- lib/sinatra/base.rb | 7 ++++--- test/public/favicon.ico | 0 test/settings_test.rb | 14 +++++++++++++- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 test/public/favicon.ico diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 876e6f27..a521c6d9 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -1029,7 +1029,6 @@ module Sinatra set :sessions, false set :logging, false set :methodoverride, false - set :static, false set :environment, (ENV['RACK_ENV'] || :development).to_sym set :run, false # start server via at-exit hook? @@ -1040,11 +1039,13 @@ module Sinatra set :app_file, nil set :root, Proc.new { app_file && File.expand_path(File.dirname(app_file)) } - set :public, Proc.new { root && File.join(root, 'public') } set :views, Proc.new { root && File.join(root, 'views') } set :reload_templates, Proc.new { !development? } set :lock, false + set :public, Proc.new { root && File.join(root, 'public') } + set :static, Proc.new { self.public && File.exist?(self.public) } + error ::Exception do response.status = 500 content_type 'text/html' @@ -1093,8 +1094,8 @@ module Sinatra set :sessions, false set :logging, Proc.new { ! test? } set :methodoverride, true - set :static, true set :run, Proc.new { ! test? } + set :static, true def self.register(*extensions, &block) #:nodoc: added_methods = extensions.map {|m| m.public_instance_methods }.flatten diff --git a/test/public/favicon.ico b/test/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/test/settings_test.rb b/test/settings_test.rb index b050f0dc..6e81f580 100644 --- a/test/settings_test.rb +++ b/test/settings_test.rb @@ -274,10 +274,22 @@ class SettingsTest < Test::Unit::TestCase end describe 'static' do - it 'is disabled on Base' do + it 'is disabled on Base by default' do assert ! @base.static? end + it 'is enabled on Base when public is set and exists' do + @base.set :environment, :development + @base.set :public, File.dirname(__FILE__) + assert @base.static? + end + + it 'is enabled on Base when root is set and root/public exists' do + @base.set :environment, :development + @base.set :root, File.dirname(__FILE__) + assert @base.static? + end + it 'is enabled on Application' do assert @application.static? end