Architecting a Rails 3.1 App
$ gem install rails [--pre]
$ rails new bug -d postgresql
Options to consider:
-d <database> : Database to use
-T : Skip Test Unit, if you want to use RSpec, etc.
-j <library> : Set up with the Javascript library
-J : Skip Javascript library
-O : Skip active-record
Ruby Toolbox is a good place to look for common rails plugins and gems to add functionality for your project. Here are the ones I like to consider.
Rails Wizard is a cool tool to generate a rails template, automatically installing the tools you select. When you are done, just run the rails
command it gives you.
rails new APP_NAME -m http://railswizard.org/5af13000c1b677a4453a.rb
If you want to apply this template to an existing application, you can do:
rake rails:template http://railswizard.org/5af13000c1b677a4453a.rb
Rubygems is the starting point to search for these gems. I have copied many gem descriptions into this page directly from their rubygems page.
IRB & Environment
These gems are useful in your RVM global
namespace, which is shared across projects. Of course, you can add them directly to your Gemfile
and have them available for everyone.
Awesome Print: irb
extension to pretty print Ruby objects to visualize their structure.
Wirble: is a set of enhancements for irb
, including tab-completion, history, and a built-in ri command, as well as colorized results and a couple other goodies.
Hirb: improves output for inspect output.
Nifty Generators: is Ryan Bate’s collection of generators for layouts and scaffolding.
Gemfile: group :development do gem ‘awesome_print’ gem ‘wirble’ gem ‘hirb’ gem ‘ruby-debug19’ gem ‘nifty-generators’ end
irbrc or ~/.irbrc: require ‘rubygems’ require ‘wirble’ require ‘awesome_print’ # start wirble (with color) Wirble.init Wirble.colorize
Views
HAML
HAML: Templating Language. For rails, use the haml-rails gem instead: gem “haml-rails”
Formtastic
Formtastic: Rails form builder plugin/gem with semantically rich and accessible markup. Also install the validation_reflection gem to build in your required validations into the form. A good getting started document is on the github page.
Gemfile:
gem “formtastic”
gem “validation_reflection”
Shell:
rails generate formtastic:install
This generates the configuration file at config/initializers/formtastic.rb
.
Add the stylesheet to the head section of views/layouts/application.html.*
:
<%= stylesheet_link_tag 'formtastic', 'formtastic_changes' %>
Generate forms for the model, overwrites app/views//_form.html. rails generate formtastic:form Post –haml
Simple Navigation
Simple Navigation: A ruby gem for creating navigations (with multiple levels) for your Rails2, Rails3, Sinatra or Padrino applications. Render your navigation as html list, link list or breadcrumbs. See the examples for demonstrations and stylsheets.
Gemfile: gem “simple-navigation”
Layouts and Assets
Blueprint Rails
Blueprint Rails: Installs the Blueprint CSS Framework in your app as a nice starting point for a clean look and customizable grid.
Gemfile: gem “blueprint-rails” Follow the setup instructions at the github page.
Compass
Compass: a Sass-based Stylesheet Framework that streamlines the creation and maintainance of CSS.
Gemfile: gem ‘compass’ Setup: compass init rails /path/to/railsroot
CSS3 Buttons
CSS3 Buttons: Rails helper methods and generators for the css3buttons by Michael Henriksen. This is a clean, github-like button look.
Gemfile: gem ‘css3buttons’ Shell: rails c css3buttons Add the stylesheet to the layout file: <%= css3buttons_stylesheets %> Usage: <%= button_link_to “Search”, search_path %>
Nifty Generators Layout
Nifty Generators Layout Installation: rails g nifty:layout –help
Authentication and Authorization
Devise
Devise: Flexible authentication solution for Rails with Warden
Gemfile: gem ‘devise’ Generate and devise engine, and edit the files to enable specific features, and finally migrate the database. See the devise github page for more information. rails generate devise:install rails generate devise User edit app/models/user.rb db/migrate/devise_create_users rake db:migrate Add to config/routes.tb devise_for :users
Omniauth
Onmuauth: an authentication framework that that separates the concept of authentiation from the concept of identity, providing simple hooks for any application to have one or multiple authentication providers for a user. See more at the omniauth homepage.
Gemfile: gem “omniauth”
Cancan
Cancan: Simple authorization solution for Rails which is decoupled from user roles. All permissions are stored in a single location. Read the cancan githug page for more usage information.
Gemfile: gem ‘cancan’ Generate: rails g cancan:ability
Active Record Extensions
Kaminari
Kaminari: a Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Rails 3. The homepage has more details.
Gemfile: gem “kaminari”
Generation: rails g kaminari:config
Controller Usage: User.page(7).per(50)
Pagination control in the View: <%= paginate @users, :window => 2 %>
API
Grape
Grape: A Ruby framework for rapid API development with great conventions. Homepage.
Gemfile: gem “grape”
Search
Sunspot
Sunspot: Sunspot is a library providing a powerful, all-ruby API for the Solr search engine. Sunspot manages the configuration of persistent Ruby classes for search and indexing and exposes Solr’s most powerful features through a collection of DSLs. Complex search operations can be performed without hand-writing any boolean queries or building Solr parameters by hand. Instructions on github.
Thinking Sphinx
Thinking Sphinx: A concise and easy-to-use Ruby library that connects ActiveRecord to the Sphinx search daemon, managing configuration, indexing and searching. Instructions for sphinx on rails 3.
Presenters
Apotomo
Testing
Rspec
Cucumber
Capybara
Capybara: Capybara is an integration testing tool for rack based web applications. It simulates how a user would interact with a website. github
ZenTest
ZenTest: ZenTest provides 4 different tools: zentest, unit_diff, autotest, and multiruby. ZenTest scans your target and unit-test code and writes your missing code based on simple naming rules, enabling XP at a much quicker pace. ZenTest only works with Ruby and Test::Unit. Nobody uses this tool anymore but it is the package namesake, so it stays. unit_diff is a command-line filter to diff expected results from actual results and allow you to quickly see exactly what is wrong. autotest is a continous testing facility meant to be used during development. As soon as you save a file, autotest will run the corresponding dependent tests. multiruby runs anything you want on multiple versions of ruby. Great for compatibility checking! Use multiruby_setup to manage your installed versions.
Guard
Guard: github. Railscast episode.
Install your testing tools
Gemfile: group :test, :development do gem ‘turn’, :require=>false gem “rspec-rails” #, “~> 2.4” gem “webrat” gem ‘cucumber-rails’ gem ‘database_cleaner’ gem ‘rb-fsevent’, :require => false if RUBY_PLATFORM =~ /darwin/i gem ‘guard-rspec’ gem ‘guard-livereload’ gem ‘guard-cucumber’ end
Generate: rails generate rspec:install rails generate cucumber:install guard init rspec guard init cucumber guard init livereload vim Guardfile guard