Browse files

Merge remote-tracking branch 'parent/master'

  • Loading branch information...
Tsvetomila Mihaylova
Tsvetomila Mihaylova committed Oct 24, 2011
2 parents d80bcc7 + 4e3a0e4 commit 7ac2bf922801ba0e6726416150b703876453fa04
Showing with 112 additions and 2 deletions.
  1. +112 −2
@@ -5,8 +5,8 @@ prescriptions for Ruby on Rails 3 development. It's a complementary
guide to the already existing community-driven
[Ruby coding style guide](
-While in the guide the section **Testing Rails applications** is after
-**Developing Rails applications** I truly believe that
+While in the guide the section [Testing Rails applications](#testing) is after
+[Developing Rails applications](#developing) I truly believe that
Behaviour-Driven Development (BDD) is the best way to develop
software. Keep that in mind.
@@ -33,6 +33,8 @@ Some of the advice here is applicable only to Rails 3.1.
* [Assets](#assets)
* [Mailers](#mailers)
* [Bundler](#bundler)
+ * [Priceless Gems](#priceless)
+ * [Flawed Gems](#flawed)
* [Managing processes](#processes)
* [Testing Rails Applications](#testing)
* [Cucumber](#cucumber)
@@ -42,6 +44,7 @@ Some of the advice here is applicable only to Rails 3.1.
* [Models](#rspec_models)
* [Mailers](#rspec_mailers)
* [Uploaders](#rspec_uploaders)
+* [Further Reading](#reading)
* [Contributing](#contributing)
* [Spread the word](#spreadtheword)
@@ -435,6 +438,103 @@ specific gems to a `linux` group:
some randomly generated file - it makes sure that all of your team
members get the same gem versions when they do a `bundle install`.
+<a name="priceless"/>
+## Priceless Gems
+One of the most important programming principles is "Don't reinvent
+the wheel!". If you're faced with a certain task you should always
+look around a bit for existing solutions, before unrolling your
+own. Here's a list of some "priceless" gems (all of them Rails 3.1
+compliant) that are useful in many Rails projects:
+* [rspec-rails]( - RSpec is a
+ replacement for Test::MiniTest. I cannot recommend highly enough
+ RSpec. rspec-rails provides Rails integration for RSpec.
+* [cucumber-rails]( -
+ Cucumber is the premium tool to develop feature tests in
+ Ruby. cucumber-rails provides Rails integration for Cucumber.
+* [haml]( - HAML is a concise templating language, considered by many
+ (including your truly) far superior to Erb.
+* [slim]( - Slim is a concise templating
+ language, considered by many far superior to HAML (not to mention
+ Erb). The only thing stopping me from using Slim massively is the
+ lack of good support in major editors/IDEs. Its performance is
+ phenomenal.
+* [simple_form]( - once you've used simple_form (or formtastic)
+ you'll never want to hear about Rails's default forms. It has a
+ great DSL for building forms and no opinion on markup.
+* [fabrication]( - a great fixture
+ replacement (editor's choice).
+* [factory_girl]( - an
+ alternative to fabrication. Nice and mature fixture
+ replacement. Spiritual ancestor of fabrication.
+* [machinist]( - Fixtures aren't
+ fun. Machinist is.
+* [faker]( - handy gem to generate dummy data (names, addresses, etc).
+* [guard]( - fantastic gem that monitors file changes and invokes
+tasks based on them. Loaded with lots of useful extension. Far
+superior to autotest and watchr.
+* [spork]( - A DRb server for
+ testing frameworks (RSpec / Cucumber currently) that forks before
+ each run to ensure a clean testing state. Simply put it preloads a
+ lot of test environment and as consequence the startup time of your
+ tests in greatly decreased. Absolute must have!
+* [simplecov]( - code coverage tool. Unlike RCov it's fully
+compatible with Ruby 1.9. Generates great reports. Must have!
+* [simplecov-rcov]( - RCov formatter for SimpleCov. Useful if you're
+ trying to use SimpleCov with the Hudson contininous integration
+ server.
+* [capybara]( - Capybara aims to
+ simplify the process of integration testing Rack applications, such
+ as Rails, Sinatra or Merb. Capybara simulates how a real user would
+ interact with a web application. It is agnostic about the driver
+ running your tests and currently comes with Rack::Test and Selenium
+ support built in. HtmlUnit, WebKit and env.js are supported through
+ external gems. Works great in combination with RSpec & Cucumber.
+* [devise]( - Devise is
+ full-featured authentication solution for Rails applications. In
+ most cases it's preferable to use devise to unrolling your custom
+ authentication solution.
+* [carrierwave]( - the
+ ultimate file upload solution for Rails. Support both local and
+ cloud storage for the uploaded files (and many other cool
+ things). Integrates great with ImageMagick for image post-processing.
+* [kaminari]( - Great paginating solution.
+* [feedzirra]( - Very fast and flexible RSS/Atom feed parser.
+* [sunspot]( - SOLR powered
+ full-text search engine.
+ [client_side_validations](
+ - Fantastic gem that automatically creates JavaScript client-side
+ validations off from your existing server-side model
+ validations. Highly recommended!
+* [rails_admin]( - With Rails Admin the creating of admin interface
+ for your Rails app is child's play. You get a nice dashboard, CRUD
+ UI and lots more. Very flexible and customizable.
+This list is not exhaustive and other gems might be added to it along
+the road. All of the gems on the list are field tested, have active
+development and community and are known to be of good code quality.
+<a name="flawed"/>
+## Flawed Gems
+This is a list of gems that are either problematic or superseded by
+other gems. You should avoid using them in your projects.
+* [rmagick]( - this gem is notorious for its memory consumption. Use
+[minimagick]( instead.
+* [autotest]( - old solution for running tests automatically. Far
+inferior to guard and [watchr](
+* [rcov]( - code coverage tool, not
+ compatible with Ruby 1.9. Use SimpleCov instead.
+* [therubyracer]( - the use of
+ this gem in production is strongly discouraged as it uses a very large amount of
+ memory.
+This list is also a work in progress. Please, let me know if you know
+other popular, but flawed gems.
<a name="processes"/>
## Managing processes
@@ -1039,6 +1139,16 @@ Here is a sample spec of a [carrierwave](
+<a name="reading"/>
+# Further Reading
+There are a few excellent resources on Rails style, that you should
+consider if you have time to spare:
+* [The Rails 3 Way](
+* [Ruby on Rails Guides](
+* [The RSpec Book](
<a name="contributing"/>
# Contributing

0 comments on commit 7ac2bf9

Please sign in to comment.