---
title: This week in open source
teaser:
tags: news,open source
author: Mike Burns
published_on: 2011-10-14
---

## bourbon

Another week of Sass mixins known as [bourbon](https://github.com/thoughtbot/bourbon). Phil LaPier ([plapier](http://github.com/plapier)) gave the `background-image` mixin support for linear and radial gradients ([f54da8f](http://github.com/thoughtbot/bourbon/commit/f54da8fd4572e5d66b41138e6414ceb1cabd9493 "Refactored deprecated-gradient decleration. Added support for radial-gradient"), [5e4cea2](http://github.com/thoughtbot/bourbon/commit/5e4cea2d82c9ac26037ebf36484b9036c5cc6c59 "Improved linear-gradient mixin to support color-stops for deprecated webkit-gradient value."), [b5d42a7](http://github.com/thoughtbot/bourbon/commit/b5d42a7cd0abbc03016d3460b9d2b20aebc8d937 "Fix radial-gradient mixin calling radial-gradient function"), [36b678e](http://github.com/thoughtbot/bourbon/commit/36b678ee4e355e0cb74ae673fac84f0a57da19e2 "Changed variable to be more semantic"), and [a63dade](http://github.com/thoughtbot/bourbon/commit/a63dade4ff77933d4898dca10d3f1c498b8618f2 "Background-image mixin now supports linear-gradients and radial-gradients")). Sean Lynch fixed the webkit gradients on older devices ([e46ba1e](http://github.com/thoughtbot/bourbon/commit/e46ba1e4a2bc230fb1e24a931457af4344d8586e "Fix -webkit-gradient rule to fix gradients on older devices")).

Matthew Burket ([Mab879](http://github.com/Mab879)) fixed the README to point out that Rails 3.0.x is up to 3.0.10 now ([098ef82](http://github.com/thoughtbot/bourbon/commit/098ef82dc11f70ad2277b1c38334c4aabc2a227f "Rails 3.0.9 should be 3.0.10.")). Matt Jankowski ([mjankowski](http://github.com/mjankowski)) added a bunch of people to the authors line of the gemspec ([72cf1e7](http://github.com/thoughtbot/bourbon/commit/72cf1e7907fb72d53e2e8088c06935a1122ddc7c "update authors in gemspec")) and fixed an interpolation bug in the radial gradient ([1fe6fce](http://github.com/thoughtbot/bourbon/commit/1fe6fce7368de14363818a2480b3c596c6d04259 "use interpolation for variables within our unquote")).

Phil and I had a talk about version numbers, after which Phil _released version 1.0.4 of bourbon_ ([1689cce](http://github.com/thoughtbot/bourbon/commit/1689ccef5cb34ac75b4cb5fc2bac8e6e916e6f61 "bump to 1.0.2"), [c994fcd](http://github.com/thoughtbot/bourbon/commit/c994fcd0240a134e7cb1c8100438dc1206e72eec "Version bump to 1.0.4"), [07fe351](http://github.com/thoughtbot/bourbon/commit/07fe35144e4eadfdce06d09c2e52755bdb427916 "Bump version to 1.0.3"), [b67224f](http://github.com/thoughtbot/bourbon/commit/b67224f2918d74dd1e03653ecfa15f36ea776a31 "Version bump to 1.0.1"), and [c6b2b73](http://github.com/thoughtbot/bourbon/commit/c6b2b7330a7beda363021ad014a0f1af650caca0 "Bourbon release v1.0.0")).

## capybara-webkit

More pull requests and refactoring for [capybara-webkit](https://github.com/thoughtbot/capybara-webkit) over the past week. Joe Ferris ([jferris](http://github.com/jferris)) simplified the `Connection` class by introducing a command factory and parser ([b4708b2](http://github.com/thoughtbot/capybara-webkit/commit/b4708b2b8836f0d35a0e85caf547adecc2972fb4 "Refactor Connection")). Lake Denman ([ldenman](https://github.com/ldenman)) spelled the word "version" correctly in the README ([25ff48a](http://github.com/thoughtbot/capybara-webkit/commit/25ff48a08a0d14112668a6439a4907d058e7ba3e "Merge pull request #186 from ldenman/master

Fix typo")). Stephen Delano ([sdelano](http://github.com/sdelano)) added support for unsupported content response headers ([62e0ec1](http://github.com/thoughtbot/capybara-webkit/commit/62e0ec1b93209754397aef92ef48a91cacae3c85 "set unsupported content response headers") and [06a4e95](http://github.com/thoughtbot/capybara-webkit/commit/06a4e95eb1cdf27414ce0bc03358cb7887252e13 "tests for unsupported content headers")).

## clearance

Busy week for the [clearance](https://github.com/thoughtbot/clearance) user auth engine! On the documentation side, Dan Croak ([croaky](http://github.com/croaky)) updated the copyright out to 2011 ([8001a77](http://github.com/thoughtbot/clearance/commit/8001a77c517f1d228b11c67377da369f82cacd5b "Updated copyright to cover 2008-2011")), updated the CHANGELOG ([644421f](http://github.com/thoughtbot/clearance/commit/644421fdf1d2c977216ab92e5f64ba9d73f5666a "keeping the CHANGELOG up to date")), mentioned all possible override points ([26933c5](http://github.com/thoughtbot/clearance/commit/26933c5cfbc3b7f447e35906e937d3cda566e4bd "improving the README")), and got explict about the dependencies you need to integrate the Cucumber tests in your app ([d4df728](http://github.com/thoughtbot/clearance/commit/d4df7288a504a756884754bd53e5f9995b15fd58 "explicitly list out dependencies of Cucumber steps")). Neil Parikh ([neilparikh](http://github.com/neilparikh)) rewrote history, claiming the Clearance was extracted from Airbrake instead of Hoptoad ([ff404c8](http://github.com/thoughtbot/clearance/commit/ff404c8876bc9c3da95eb99bd4ca6d9d85f7b1e1 "Updated link on README.")). Gabe "typo fixer" Berke-Williams ([gabebw](http://github.com/gabebw)) fixed the word "dependent" in the README ([bb2e919](http://github.com/thoughtbot/clearance/commit/bb2e919cc66e46287c006b7f4d07583cc8fcad40 "typo")).

Dan also took note of Cucumber's removal of `web_steps.rb`, which many people think is fantastic, and removed mention of any steps defined there ([ece4b10](http://github.com/thoughtbot/clearance/commit/ece4b10ed6f4612231ba3d5b7589836f66d36d40 "don"), [e01f366](http://github.com/thoughtbot/clearance/commit/e01f3666421b10b1a2e18645aaea2d9f153734c9 "with dependency on cucumber"), and [fef1fae](http://github.com/thoughtbot/clearance/commit/fef1fae52b7a503cd000ebfbd44ee244416c21b6 "Removing the dependency on:

* features/step_definitions/web_steps.rb
* features/support/paths.rb
* features/support/selectors.rb

The reason is Cucumber 1.1.0 removes these. They have their own reasons,
which are solid:

https://github.com/cucumber/cucumber-rails/commit/f027440965b96b780e84e50dd47203a2838e8d7d")). Keeping up with the rubygems gem he switched from `rake/gempackagetask` to `rubygems/package_task` ([6759d6d](http://github.com/thoughtbot/clearance/commit/6759d6dcafe09decd4be331dcb6dddcde3a6a641 "rake/gempackagetask is deprecated.  Use rubygems/package_task instead")). He also tried to start a fight over how appraisal functions by asking about ignoring appraised gemfile locks ([8dde7b0](http://github.com/thoughtbot/clearance/commit/8dde7b0738e57d1d4c52f2624d662b551fda98ba "bundled. gemfiles updated. checking with appraisal to see if we should
be gitignoring this: https://github.com/thoughtbot/appraisal/issues/12")). To finish it off, Dan _released verion 0.13.0 of Clearance_ ([b2995c8](http://github.com/thoughtbot/clearance/commit/b2995c86ccf0d3c4b00b0fb441e00bed505f89aa "bumping version to 0.13.0")).

## continuous_sprinkles

We had a Sprinkle script for setting up a continuous integration server, named [continuous_sprinkles](https://github.com/thoughtbot/continuous_sprinkles) appropriately enough. We don't use this, so Mike Burns ([mike-burns](http://github.com/mike-burns)) deprecated it ([c7dab0a](http://github.com/thoughtbot/continuous_sprinkles/commit/c7dab0a4d95eb198a192b707341c8bc2bd2e147c "Continuous Sprinkles is no longer maintained.")). Before doing so he pulled in a patch from Ezra Spier ([ahhrrr](https://github.com/ahhrrr)) to update the <abbr title="Ruby Version Manager">RVM</abbr> setup ([2f1b8b](https://github.com/thoughtbot/continuous_sprinkles/commit/2f1b8ba14524cb736ccbe667ff411d775ec6d7ed "Update RVM installation to be consistent with current installation instructions")).

## factory_bot

There's [a whole blog post](https://thoughtbot.com/blog/post/11437609921/factory-bot-2-2-your-new-best-friend) on [factory_bot](https://github.com/thoughtbot/factory_bot) version 2.2 so I'll be brief: Joshua Clayton ([joshuaclayton](http://github.com/joshuaclayton)) removed a bunch of unnecessary public methods such as `#ignore` ([dc32fd6](http://github.com/thoughtbot/factory_bot/commit/dc32fd69e84dd667b763dd691943123636efa1bd "Change syntax for ignoring attributes to use block syntax [...]")), `#add_child` ([481ea09](http://github.com/thoughtbot/factory_bot/commit/481ea09f2db133c72c0fc859360ba98aa92c6a50 "Goodbye children")), `#attributes` ([3bef858](http://github.com/thoughtbot/factory_bot/commit/3bef85893006f18f23ef27216e1384c7d2912e24 "Make Factory#attributes protected")), `#callbacks` ([7f42abe](http://github.com/thoughtbot/factory_bot/commit/7f42abe6be9f98534a0840577e6b5082ac15e801 "Clean up more method scoping")), and `#attribute_defined?` ([39caed0](http://github.com/thoughtbot/factory_bot/commit/39caed08c7ca290729f06f7da0380ebd3993b91e "Clean up scoping")). He refactored the `#add_attribute` method on a definition proxy ([a50adda](http://github.com/thoughtbot/factory_bot/commit/a50adda6c31b1b8fe929bb5be3e00e6125f577f0 "Reorganize #add_attribute")), standardized deprecation warnings ([0c84876](http://github.com/thoughtbot/factory_bot/commit/0c84876115906ca25cf45482745c32231ca18de2 "Standardize deprecation warnings")), moved the exception class definitions around ([1153783](http://github.com/thoughtbot/factory_bot/commit/115378350bdd3ec03bd696a08d4f68252bf56b81 "More Factory reorganization and cleanup")), and allowed no block to be passed to the `#ignore` block ([eb21a44](http://github.com/thoughtbot/factory_bot/commit/eb21a449de59862a64fb9351e5da8b5b3f93b5f9 "Default block to nil so ignored can be optional")). Justin Ko ([justinko](http://github.com/justinko)) rocked our faces with some test cleanups, including removing redundant "should"s in behavior descriptions ([334b8a9](http://github.com/thoughtbot/factory_bot/commit/334b8a944977d68dafaaf5871d9b3f2bec6553de "No more ")), then followed up with the equally pleasing feature that removes the need to call `#tap` in order to modify your generated object with a block ([f32651d](http://github.com/thoughtbot/factory_bot/commit/f32651d9b20173778792691bd4e04a4d0c7bc598 "Calling the syntax methods with a block yields the return object. Closes #210")). Vasiliy Ermolovich ([nashby](http://github.com/nashby)) updated the supplied step definitions to use `FactoryBot.create_list` instead of `Fixnum#times` ([9fcd0b6](http://github.com/thoughtbot/factory_bot/commit/9fcd0b6b4e514688265a33c5396c6df3ced4aaff "Use create_list in step definitions Closes #213")). Joe Ferris ([jferris](http://github.com/jferris)) attempted to fix the link to the getting started documentation ([f4ee363](http://github.com/thoughtbot/factory_bot/commit/f4ee3631efa9ad2c7efa301ca9eaea8689f488d3 "Revert ")). Jeff Dutil ([jdutil](http://github.com/jdutil)) cleaned up whitespace made by the fixture generator ([d364e83](http://github.com/thoughtbot/factory_bot_rails/commit/d364e832d6080241060cbf6e6a4d8998fc261cd2 "Correct whitespace generated by factory template. Closes #36")).

Anyway, that's a bunch of stuff, but the point is Josh wrote [a blog post](https://thoughtbot.com/blog/post/11437609921/factory-bot-2-2-your-new-best-friend) and _released version 2.2.0 of FactoryBot_ ([41f73b5](http://github.com/thoughtbot/factory_bot/commit/41f73b5e39efa64839890b12ea771150ccf6597f "Bump version to 2.2.0")).

## flutie

Some sweet default styles, [flutie](https://github.com/thoughtbot/flutie), got a README update from Tom Crinson ([MrJaba](http://github.com/MrJaba)) mentioning the differences between Rails 3.1 and earlier versions ([323026c](http://github.com/thoughtbot/flutie/commit/323026cc695f75334cf4edf6441b2cf05fb7ba49 "Updated README.md to better specify how to install on a Rails 3.1 application")).

## kumade

Big refactoring on our Heroku deployer, [kumade](https://github.com/thoughtbot/kumade). Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) added an `Outputter` class, which knows how to output things. After much discussion he made this a part of the configuration and used the well-blogged-about dependency injection pattern to simplify tests. This outputter means that you could potentially add a GUI or Web outputter! Imagine the possibilities! JSON! AJAX! XMPP! BBQ! ([342082a](http://github.com/thoughtbot/kumade/commit/342082ad2c8529aa6b22eef62e41814b99827cb9 "Move outputter into configuration."), [bb95538](http://github.com/thoughtbot/kumade/commit/bb9553888f10be176a8d23310c904337a904b76d "Default to the real outputter in specs."), [3af22ce](http://github.com/thoughtbot/kumade/commit/3af22ce1fd074fc9018da2e415530a1d8201ea0a "Use say_command"), [6d7c867](http://github.com/thoughtbot/kumade/commit/6d7c8679c3a2852d6d53f818e9770965e63ba869 "WIP: actually use Outputter, and remove Base class."), [92a4add](http://github.com/thoughtbot/kumade/commit/92a4addd00cb6feb461e6b654ff7ad8d790b7c09 "Add Outputter.")). Along the way he fixed a failing spec ([6359702](http://github.com/thoughtbot/kumade/commit/63597029ef5493852affa364a1deeacde6eff636 "Fix spec")), only deleted branches if they exist ([f260e9e](http://github.com/thoughtbot/kumade/commit/f260e9e0569625b76ca43f87da5ff18ce7a47935 "Only delete branch if it exists.")), and showed an error message when the deployment fails ([c27f13f](http://github.com/thoughtbot/kumade/commit/c27f13fab296765705a4b14c6aa8808cba47a71f "Print error if something goes wrong in deploy.")).

Matt Jankowski ([mjankowski](http://github.com/mjankowski)) updated the README's copyright, license, and credits sections ([acd2b6a](http://github.com/thoughtbot/kumade/commit/acd2b6aa47e60656cbb7149b23643c9fa7b8f23a "Update credits/license area to use standard format.")) and then Gabe _released version 0.5.0 of kumade_ ([a28adea](http://github.com/thoughtbot/kumade/commit/a28adea24ae688372b1fef1da3f4aa6eb1da9dcd "Bump version to 0.5.0")).

## pacecar

Our collection of ActiveRecord scopes is [pacecar](https://github.com/thoughtbot/pacecar). Ryan Sonnek ([wireframe](https://github.com/wireframe)) fixed deprecation warnings that appear when you leave space between a method and the open parenthesis ([bdca580](http://github.com/thoughtbot/pacecar/commit/bdca5805575c0bc10e05db8044a616cee10f852a "Merge branch ") and [199ad67](http://github.com/thoughtbot/pacecar/commit/199ad67bd3b2a5fbec1db3c0a252d8252ef595bc "remove spaces before parens to avoid deprecation warnings in some ruby versions")). Matt Jankowski ([mjankowski](http://github.com/mjankowski)) tested it on Rails 3.1.1 ([3be3ad5](http://github.com/thoughtbot/pacecar/commit/3be3ad5b0df099831fc8669fa019d4d0169dc46e "use rails 3.1.1 for appraisal")) and then _released version 1.5.2 of pacecar_ ([f838a84](http://github.com/thoughtbot/pacecar/commit/f838a8458d9b499a518e6130a3675a3f77b124df "bump version to 1.5.2")).

## paperclip

Ah [paperclip](https://github.com/thoughtbot/paperclip), the file uploader gem for Rails. In the housekeeping area, Prem Sichanugrist ([sikachu](http://github.com/sikachu)) fixed some stray whitespace ([7ab5ba6](http://github.com/thoughtbot/paperclip/commit/7ab5ba669ad7ffa13c3a9890747d190ee06342fb "Fix whitespace in task")) and regenerated the appraisal gemfiles ([47a56c2](http://github.com/thoughtbot/paperclip/commit/47a56c248e50a060be9dcc167490ee4db6f73b37 "Update generated Gemfiles")); trafnar ([trafnar](http://github.com/trafnar)) added more about URI obfuscation to the README ([2b8526b](http://github.com/thoughtbot/paperclip/commit/2b8526b42b28d1a29a1a547ab999de747353fdef "Expanded URI Obfuscation documentation.")); and Nick Quaranto ([qrush](http://github.com/qrush)) noted that `#form_for` needs `<%=` ([d808aa6](http://github.com/thoughtbot/paperclip/commit/d808aa63513ff12b370187efd3f3041b247dbf34 "form_for needs <%=, thanks @johnallen3d !")).

Feature-wise, Prem removed the Rails root from the default S3 storage ([4ecd5b1](http://github.com/thoughtbot/paperclip/commit/4ecd5b1d0568029209d8574819f1535b4729bf74 "Remove :rails_root/public/system from default URL of S3 storage

So instead of having:

http://s3.amazonaws.com/paperclip/var/www/foo.com/current/avatars/1/original/foo.jpg

because default path has the :rails_root, now you")) and added an `InterpolatedString` class to handle URL escaping ([56e4135](http://github.com/thoughtbot/paperclip/commit/56e413590c9e9d7fc62311863295b779b55be071 "Avoid calling URI.escape in #url method, and use Paperclip::InterpolatedString

Paperclip::InterpolatedString will ensure that we") and [db60516](http://github.com/thoughtbot/paperclip/commit/db60516ca9790a70210ac943bd34e666c6994840 "Add Paperclip::InterpolatedString to store the interpolated string which has an escape flag")).

## shoulda-matchers

I finally got our collection of RSpec matchers to pass on my laptop: [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers). So from Håkon Lerring ([Hakon](https://github.com/Hakon)) we have a matcher for the `:conditions` option for associations ([293b8aa](http://github.com/thoughtbot/shoulda-matchers/commit/293b8aab538e7950145705714ad119b25be8582e "Merge branch ")); from Jeff Dutil ([jdutil](https://github.com/jdutil)) we have a documentation fix for the `have_readonly_attribute` matcher ([ea477b8](http://github.com/thoughtbot/shoulda-matchers/commit/ea477b886d4b0a92ee9792f9e321f5fa511e5f70 "Merge branch ")); from Light Year Software, LLC ([lightyear](https://github.com/lightyear)) we got a fix for `validations_uniqueness_of` with a non-string value ([21fa1f1](http://github.com/thoughtbot/shoulda-matchers/commit/21fa1f1867fd708d8c72adc093702eae81de56e6 "Merge branch ")); and from Shalva Usubov ([shaliko](https://github.com/shaliko)) we got another documentation fix to remove some duplication for the `route` matcher ([3ee5e5f](http://github.com/thoughtbot/shoulda-matchers/commit/3ee5e5f5df278087b726006b3ae447f555de4faa "Merge branch ")).

## suspenders

The Rails template we use for starting new apps is [suspenders](https://github.com/thoughtbot/suspenders). Harold Giménez ([hgimenez](http://github.com/hgmnz)) updated it to use Rails 3.1.1 ([0504fa2](http://github.com/thoughtbot/suspenders/commit/0504fa22a48e0fd273dfacaa42c6f137718a961b "Bump to rails 3.1.1")) and along the way used the Ruby `File` class where possible to abstract out platform-dependent file path issues ([45faf41](http://github.com/thoughtbot/suspenders/commit/45faf41fb5ec32b36d222195841a1b91ce2c3e46 "Use File.join where possible for better cross-platform compatibility")), removed any explicit JavaScript caching ([552c654](http://github.com/thoughtbot/suspenders/commit/552c654b2a2198359f69c9f499e3083555589a52 "no :cache necessary with sprokets (in fact, method signature won")), and no doubt noticed that the `REPO` command-line variable is undocumented so he added it himself to the CONTRIBUTING documentation ([4025029](http://github.com/thoughtbot/suspenders/commit/40250296ef87c83392f78d623c2d48758b024098 "Reminder about REPO variable")).
