BlueSparks

Epic static page rendering controller with support for nested pages. Heavily inspired by thoughtbot's high_voltage.

Static pages?

Yeah, like "About us", "Directions", marketing pages, etc.

Installation

% gem install blue_sparks

Include in your Gemfile:

gem "blue_sparks"

Sorry, folks, Rails 3 only.

Usage

Write your static pages and put them in the RAILS_ROOT/app/views/pages directory.

% mkdir app/views/pages
% touch app/views/pages/about.html.erb

Bam.

Routes

By default, the static page routes will be like /pages/:id (where :id is the view filename).

If you want to route to a static page in another location (for example, a homepage), do this:

match 'pages/home' => 'blue_sparks/pages#show', :id => 'home'

In that case, you'd need an app/views/pages/home.html.erb file.

Generally speaking, you need to route to the 'show' action with an :id param of the view filename.

You can route the root url to a high voltage page like this:

root :to => 'blue_sparks/pages#show', :id => 'home'

Which will render a homepage from app/views/pages/home.html.erb

Override

Most common reasons to override?

  • You need authentication around the pages to make sure a user is signed in.
  • You need to render different layouts for different pages.

Create a PagesController of your own:

$ rails generate controller pages

Override the default route:

# in config/routes.rb
resources :pages

Then modify it to subclass from High Voltage, adding whatever you need:

class PagesController < BlueSparks::PagesController
  before_filter :authenticate
  layout :layout_for_page

  protected
    def layout_for_page
      case params[:id]
      when 'home'
        'home'
      else
        'application'
      end
    end
end

Testing

Just a suggestion, but you can test your pages using Shoulda pretty easily:

class PagesControllerTest < ActionController::TestCase
  tests PagesController

  %w(earn_money screencast about contact).each do |page|
    context "on GET to /#{page}" do
      setup { get :show, :slug => page }

      should_respond_with :success
      should_render_template page
    end
  end
end

If you're not using a custom PagesController be sure to test BlueSparks::PagesController instead.

Enjoy!

Credits

thoughtbot

for their awesome high_voltage gem.

The names and logos for thoughtbot are trademarks of thoughtbot, inc.

License

BlueSparks is Copyright © 2011 Cody Krieger. It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.