Skip to content

Commit

Permalink
Fix subclassed PagesController with custom layout
Browse files Browse the repository at this point in the history
  • Loading branch information
mhoran committed Feb 23, 2012
1 parent 7556fcd commit e4b1ce9
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 58 deletions.
4 changes: 2 additions & 2 deletions app/controllers/high_voltage/pages_controller.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
class HighVoltage::PagesController < ApplicationController

unloadable
layout HighVoltage::layout
layout Proc.new { HighVoltage::layout }

rescue_from ActionView::MissingTemplate do |exception|
if exception.message =~ %r{Missing template #{HighVoltage::content_path}}
Expand All @@ -12,7 +12,7 @@ class HighVoltage::PagesController < ApplicationController
end

def show
render :template => current_page, :layout => HighVoltage::layout
render :template => current_page
end

protected
Expand Down
32 changes: 32 additions & 0 deletions spec/controllers/subclassed_pages_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
require 'spec_helper'

describe SubclassedPagesController do

render_views

describe "on GET to /subclassed_pages/exists" do
before { get :show, :id => 'exists' }

it "should respond with success and render template" do
response.should be_success
response.should render_template('exists')
end

it "should use the custom configured layout" do
response.should_not render_template("layouts/application")
response.should render_template('layouts/alternate')
end
end

it "should raise a routing error for an invalid page" do
lambda { get :show, :id => "invalid" }.should raise_error(ActionController::RoutingError)
end

it "should raise a routing error for a page in another directory" do
lambda { get :show, :id => "../other/wrong" }.should raise_error(ActionController::RoutingError)
end

it "should raise missing template error for valid page with invalid partial" do
lambda { get :show, :id => "exists_but_references_nonexistent_partial" }.should raise_error(ActionView::MissingTemplate)
end
end
3 changes: 3 additions & 0 deletions spec/dummy/app/controllers/subclassed_pages_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class SubclassedPagesController < HighVoltage::PagesController
layout 'alternate'
end
57 changes: 1 addition & 56 deletions spec/dummy/config/routes.rb
Original file line number Diff line number Diff line change
@@ -1,58 +1,3 @@
Dummy::Application.routes.draw do
# The priority is based upon order of creation:
# first created -> highest priority.

# Sample of regular route:
# match 'products/:id' => 'catalog#view'
# Keep in mind you can assign values other than :controller and :action

# Sample of named route:
# match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
# This route can be invoked with purchase_url(:id => product.id)

# Sample resource route (maps HTTP verbs to controller actions automatically):
# resources :products

# Sample resource route with options:
# resources :products do
# member do
# get 'short'
# post 'toggle'
# end
#
# collection do
# get 'sold'
# end
# end

# Sample resource route with sub-resources:
# resources :products do
# resources :comments, :sales
# resource :seller
# end

# Sample resource route with more complex sub-resources
# resources :products do
# resources :comments
# resources :sales do
# get 'recent', :on => :collection
# end
# end

# Sample resource route within a namespace:
# namespace :admin do
# # Directs /admin/products/* to Admin::ProductsController
# # (app/controllers/admin/products_controller.rb)
# resources :products
# end

# You can have the root of your site routed with "root"
# just remember to delete public/index.html.
# root :to => "welcome#index"

# See how all your routes lay out with "rake routes"

# This is a legacy wild controller route that's not recommended for RESTful applications.
# Note: This route will make all actions in every controller accessible via GET requests.
# match ':controller(/:action(/:id(.:format)))'
match "/subclassed_pages/*id" => 'subclassed_pages#show', :format => false
end

0 comments on commit e4b1ce9

Please sign in to comment.