def self.registered(app)
app.helpers RespondTo::Helpers
app.set :default_charset, 'utf-8'
app.set :default_content, :html
app.set :assume_xhr_is_js, true
app.before do
next if self.class.development? && request.path_info =~ %r{/__sinatra__/.*?.png}
unless options.static? && options.public? && (request.get? || request.head?) && static_file?(request.path_info)
if request.params.has_key? 'format'
format params['format']
else
request.path_info.sub! %r{\.([^\./]+)$}, ''
format request.xhr? && options.assume_xhr_is_js? ? :js : $1 || options.default_content
end
charset options.default_charset if Sinatra::RespondTo::TEXT_MIME_TYPES.include? format
end
end
app.configure :development do |dev|
dev.error UnhandledFormat do
content_type :html, :charset => 'utf-8'
("<!DOCTYPE html>\n<html>\n<head>\n<style type=\"text/css\">\nbody { text-align:center;font-family:helvetica,arial;font-size:22px;\ncolor:#888;margin:20px}\n#c {margin:0 auto;width:500px;text-align:left}\n</style>\n</head>\n<body>\n<h2>Sinatra doesn't know this ditty.</h2>\n<img src='/__sinatra__/404.png'>\n<div id=\"c\">\nTry this:\n<pre>\#{request.request_method.downcase} '\#{request.path_info}' do\\n respond_to do |wants|\\n wants.\#{format} { \"Hello World\" }\\n end\\nend</pre>\n</div>\n</body>\n</html>\n").gsub(/^ {10}/, '')
end
dev.error MissingTemplate do
content_type :html, :charset => 'utf-8'
response.status = request.env['sinatra.error'].code
engine = request.env['sinatra.error'].message.split('.').last
engine = 'haml' unless ['haml', 'builder', 'erb'].include? engine
path = File.basename(request.path_info)
path = "root" if path.nil? || path.empty?
format = engine == 'builder' ? 'xml' : 'html'
layout = case engine
when 'haml' then "!!!\n%html\n %body= yield"
when 'erb' then "<html>\n <body>\n <%= yield %>\n </body>\n</html>"
when 'builder' then "xml << yield"
end
layout = "<small>app.#{format}.#{engine}</small>\n<pre>#{escape_html(layout)}</pre>"
("<!DOCTYPE html>\n<html>\n<head>\n<style type=\"text/css\">\nbody { text-align:center;font-family:helvetica,arial;font-size:22px;\ncolor:#888;margin:20px}\n#c {margin:0 auto;width:500px;text-align:left;}\nsmall {float:right;clear:both;}\npre {clear:both;}\n</style>\n</head>\n<body>\n<h2>Sinatra can't find \#{request.env['sinatra.error'].message}</h2>\n<img src='/__sinatra__/500.png'>\n<div id=\"c\">\nTry this:<br />\n\#{layout}\n<small>\#{path}.\#{format}.\#{engine}</small>\n<pre>Hello World!</pre>\n<small>application.rb</small>\n<pre>\#{request.request_method.downcase} '\#{request.path_info}' do\\n respond_to do |wants|\\n wants.\#{engine == 'builder' ? 'xml' : 'html'} { \#{engine} :\#{path}\#{\",\\n\#{' '*32}layout => :app\" if layout} }\\n end\\nend</pre>\n</div>\n</body>\n</html>\n").gsub(/^ {10}/, '')
end
end
app.class_eval do
alias :render_without_format :render
def render(*args, &block)
assumed_layout = args[1] == :layout
args[1] = "#{args[1]}.#{format}".to_sym if args[1].is_a?(::Symbol)
render_without_format *args, &block
rescue Errno::ENOENT => e
raise MissingTemplate, "#{args[1]}.#{args[0]}" unless assumed_layout
raise e
end
private :render
end
end