Buildybuild

Buildybuild is generator that allows you to quickly generate things like:

  • static pages with either markup or a provided cms.
  • an awesome active link helper

Installation

Add this line to your application's Gemfile:

$ gem 'buildybuild'

And then execute:

$ bundle

Or install it yourself as:

$ gem install buildybuild

Note: There are runtime dependencies in Buildybuild so you'll have to add the following if buildybuild is not in your Gemfile:

gem 'decent_exposure'
gem 'haml-rails'
gem 'formal'
gem 'rdiscount'

Usage

For static pages (the CMS)

$ rails generate buildybuild:cms

# you can pass a name for the generated resource. Default is "page" i.e.:

$ rails generate buildybuild:cms static_page

This will create the following files:

  • app/models/page.rb
  • db/migrate/[timestamp]_create_pages.rb
  • app/controllers/pages_controller.rb
  • app/views/pages/new.html.haml
  • app/views/pages/edit.html.haml
  • app/views/pages/show.html.haml
  • app/views/pages/_form.html.haml

and appends the following to the bottom of your routes file:

resources :pages, only: [:new, :create]

#keep these at the bottom of your file. They should be the last routes.
get "/:slug", to: "pages#show", as: :slug
get "/:slug/edit", to: "pages#edit", as: :edit_slug
put "/:slug", to: "pages#update", as: :slug
post "/:slug", to: "pages#destroy", as: :slug

Next

run the migration

$ rake db:migrate

And you're set. Now you can go to http://localhost:3000/pages/new and see your new Content Management System in action!

Or you can create static pages and stick them in app/views/pages/. Then you will automatically have access to the page in your routes.

Observe:

Create a static page called app/views/pages/about_us.html.haml

Then automatically have access to http://localhost:3000/about-us.

Notice the difference between the underscore "_" in the file name and the dash "-" in the url.

This is so you can replace your link_to helper with active_link_to which will add a class of "active" to the link when you're on that page. i.e:

= active_link_to "/about-us", "About"

returns the following when the current page is ```/about-us"

<a class="active" href="/about-us">About</a>

Run

$ rails g buildybuild:active_link

This appends the following to the bottom of your ApplicationHelper:

def active_link_to(text, path, options={})
  if /^#{url_for(path)}/ =~ request.path
    options[:class] = "#{options[:class]} active"
  end
  link_to text, path, options
end

It's kinda small. But cool!

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request