def render_403
@project = nil
respond_to do |format|
- format.html { render :template => "common/403", :layout => (request.xhr? ? false : 'base'), :status => 403 }
+ format.html { render :template => "common/403", :layout => use_layout, :status => 403 }
format.atom { head 403 }
format.xml { head 403 }
format.js { head 403 }
def render_404
respond_to do |format|
- format.html { render :template => "common/404", :layout => !request.xhr?, :status => 404 }
+ format.html { render :template => "common/404", :layout => use_layout, :status => 404 }
format.atom { head 404 }
format.xml { head 404 }
format.js { head 404 }
respond_to do |format|
format.html {
flash.now[:error] = msg
- render :text => '', :layout => !request.xhr?, :status => 500
+ render :text => '', :layout => use_layout, :status => 500
}
format.atom { head 500 }
format.xml { head 500 }
format.json { head 500 }
end
end
+
+ # Picks which layout to use based on the request
+ #
+ # @return [boolean, string] name of the layout to use or false for no layout
+ def use_layout
+ request.xhr? ? false : 'base'
+ end
def invalid_authenticity_token
if api_request?
--- /dev/null
+require "#{File.dirname(__FILE__)}/../test_helper"
+
+class LayoutTest < ActionController::IntegrationTest
+ fixtures :all
+
+ test "browsing to a missing page should render the base layout" do
+ get "/users/100000000"
+
+ assert_response :not_found
+
+ # UsersController uses the admin layout by default
+ assert_select "#admin-menu", :count => 0
+ end
+
+ test "browsing to an unauthorized page should render the base layout" do
+ user = User.find(9)
+ user.password, user.password_confirmation = 'test', 'test'
+ user.save!
+
+ log_user('miscuser9','test')
+
+ get "/admin"
+ assert_response :forbidden
+ assert_select "#admin-menu", :count => 0
+ end
+end