Repository is archived
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
A Rack application for serving static sites with ERB templates.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0

Runtime

~> 1.0
~> 1.0
~> 1.1
 Project Readme

Brochure

Brochure is a Rack application for serving static sites with ERB templates (or any of the many template languages supported by Tilt). It's the good parts of PHP wrapped up in a little Ruby package — perfect for serving the marketing site for your Rails app.

Sample application structure:

templates/
  help/
    index.html.erb
  index.html.erb
  shared/
    _header.html.erb
    _footer.html.erb
  signup.html.erb
config.ru
public/
  ...

Sample config.ru:

require "brochure"
root = File.dirname(__FILE__)
run Brochure.app(root)

Automatic URL mapping

URLs are automatically mapped to template names:

  • /templates/index.html.erb
  • /signuptemplates/signup.html.erb
  • /help/templates/help/index.html.erb

Partials and helpers

Templates can render partials. A partial is denoted by a leading underscore in its filename. So <%= render "shared/header" %> will render templates/shared/_header.html.erb inline.

Partials can <%= yield %> back to the templates that render them. You can use this technique to extract common header and footer markup into a single layout file, for example.

Templates have access to the Rack environment via the env method and to the Brochure application via the application method. Additionally, a Rack::Request wrapper around the Rack environment is available via the request method.

You can print HTML-escaped strings in your templates with the h helper.

Custom helper methods and instance variables

You can make additional helper methods and instance variables available to your templates. Helper methods live in Ruby modules and can be included with the :helpers option to Brochure.app:

module AssetHelper
  def asset_path(filename)
    local_path = File.join(application.asset_root, filename)
    digest = Digest::MD5.hexdigest(IO.read(local_path))
    "/#{filename}?#{digest}"
  end
end

run Brochure.app(root, :helpers => [AssetHelper])

Similarly, instance variables can be defined with the :assigns option:

run Brochure.app(root, :assigns => { :domain => "37signals.com" })

Tilt template options

You can specify global Tilt template options on a per-engine basis with :template_options:

run Brochure.app(root, :template_options => {
  ".haml" => { :format => :html5 },
  ".md"   => { :smart  => true }
})

Installation

$ gem install brochure

Requires Hike, Rack, and Tilt.

License

Copyright (c) 2010 Sam Stephenson and Josh Peek.

Released under the MIT license. See LICENSE for details.