---
title: This Week In Open Source
teaser: Updates about our open source projects.
tags: news,open source
author: Mike Burns
published_on: 2012-03-30
---

## laptop

I was reminded that I've been missing out on our sweet
[laptop](https://github.com/thoughtbot/laptop) script, which is a program we
maintain to get a Rails environment set up on OS X as quickly as possible. So
over the past week, Antonio Salazar Cardozo
([Shadowfiend](http://github.com/Shadowfiend)) fixed our capitalization of Qt
([b667280](http://github.com/thoughtbot/laptop/commit/b667280dd9e1def5107582512ebd2bd2dea6e19a
"Fix capitalization of Qt toolkit.")), Prem Sichanugrist
([sikachu](http://github.com/sikachu)) fixed our capitalization of JavaScript
([87fe88f](http://github.com/thoughtbot/laptop/commit/87fe88f9244cdcd0fe418a8ede17915b50787ed3
"Balls to the wall, people.")), and Dan Croak
([croaky](http://github.com/croaky)) removed the deprecated Heroku Labs plugin
([842cd0d](http://github.com/thoughtbot/laptop/commit/842cd0dde6ea9876b50a7608f7de7ca7674ea135
"[#26] Remove Heroku Labs plugin")) and gave instructions on installing the
command-line Xcode tools
([a177cca](http://github.com/thoughtbot/laptop/commit/a177ccafa50e92bb7e773d769cc32e829b5ab99b
"[#16] Recommend Command Line Tools for Xcode")).

## suspenders

The [suspenders](https://github.com/thoughtbot/suspenders) gem, which has helped
many people start a Rails app, now shows that the build is broken.  Gabe
Berke-Williams ([gabebw](http://github.com/gabebw)) added that
([76e42eb](http://github.com/thoughtbot/suspenders/commit/76e42eb3f0a55221b7835ade3609b90d2ea339c5
"Add build status.")).

## shoulda-matchers

The [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers) gem is a
collection of RSpec matchers for various Rails things. Gabe Berke-Williams
([gabebw](http://github.com/gabebw)) went to town on it this week, cleaning
everything up in an effort to make it more pleasant to hack on
([2b98e49](http://github.com/thoughtbot/shoulda-matchers/commit/2b98e497f8a732da80fbae4b6f6814461cb8703c
"Whitespace."),
[09544fa](http://github.com/thoughtbot/shoulda-matchers/commit/09544faf45a99f7c3cb490f4c7e351c18498d733
"Remove unused parameter."),
[7b3d6d0](http://github.com/thoughtbot/shoulda-matchers/commit/7b3d6d0f868bfebacbf33828045de2bfd7b7111a
"Continue cleaning up matchers."),
[96df0b1](http://github.com/thoughtbot/shoulda-matchers/commit/96df0b12ca5df59bbc06bfd4feffc4be6a77126f
"Continue cleaning up matchers."),
[36006d8](http://github.com/thoughtbot/shoulda-matchers/commit/36006d83b4d9781ef502215de82c4132bd1f4b8e
"Mutate less."),
[4ff1344](http://github.com/thoughtbot/shoulda-matchers/commit/4ff1344c2db14ee4d35291bc5a10622f98dd0236
"Clean up ValidatesNumericalityOfMatcher a bit."),
[3b3181b](http://github.com/thoughtbot/shoulda-matchers/commit/3b3181b11aa84e5e6da0b632e4e38d929430db88
"Whitespace."),
[4574f51](http://github.com/thoughtbot/shoulda-matchers/commit/4574f516926116cc96e2635ebd3c2efc37c6bcd9
"Rearrange requires such that tests pass."),
[1c517d2](http://github.com/thoughtbot/shoulda-matchers/commit/1c517d27954df6e1d1051abcc58cf4c475dfd282
"Rearrange requires."),
[bd52483](http://github.com/thoughtbot/shoulda-matchers/commit/bd524833ffe02c17721c5ad5cfa6a17274a66681
"We don"),
[e70e1bf](http://github.com/thoughtbot/shoulda-matchers/commit/e70e1bf9a558e1d2d6142e3b733b1a390ef6e89a
"Require bourne."),
[41bccc8](http://github.com/thoughtbot/shoulda-matchers/commit/41bccc8cbff4c80636250171f48e0907be79d164
"Cleanup.")). Having done that, he added a `:primary` option to the
`have_db_column` matcher
([68e65b2](http://github.com/thoughtbot/shoulda-matchers/commit/68e65b2aba85fa48b6415e3aed3517eb366addc7
"Check primality of DB columns. Fixes #35.")). Matthew Daubert
([MDaubs](http://github.com/MDaubs)) fixed a JRuby failure and also added
support for Rails 3.0
([d85503f](http://github.com/thoughtbot/shoulda-matchers/commit/d85503f86ef224bca2b54fc6b9ad96866fe12f2d
"Fix spec failure in jruby and add support for Rails 3.0")).

## bourne

Due to my complaining last week, the
[bourne](https://github.com/thoughtbot/bourne) gem now has a `NEWS` file
([8dfb077](http://github.com/thoughtbot/bourne/commit/8dfb077d511c7732a5cef5d358b94b30620621a8
"Add NEWS file.")), thanks to Gabe Berke-Williams
([gabebw](http://github.com/gabebw)).

## paperclip

So we have this gem named [paperclip](https://github.com/thoughtbot/paperclip).
You might have heard of it. This week, Tony Brewerio
([tony-brewerio](http://github.com/tony-brewerio)) fixed the `:content_type`
validator
([c4c22f8](http://github.com/thoughtbot/paperclip/commit/c4c22f8aab1d809a46bc97dcb32bb9f8586922a7)).

Prem Sichanugrist ([sikachu](http://github.com/sikachu)) released [version
3.0.1](https://thoughtbot.com/blog/post/19970041727/paperclip-is-going-three-point-oh-nelly),
which breaks backward compatibility
([d61ddd5](http://github.com/thoughtbot/paperclip/commit/d61ddd5cafc8379721ae56119076c8c65858ee0e
"Silence ALL the STDERR warnings!"),
[51bb0f9](http://github.com/thoughtbot/paperclip/commit/51bb0f9fa33aa745bd2a03ca18bc2f123c2acefa
"Adding Attachment#geometry to get file"),
[7088f5b](http://github.com/thoughtbot/paperclip/commit/7088f5b92e581c9b7e7a4e4c475059acf0bd9154
"Skip bundler on app generation to speed up"),
[e1951ed](http://github.com/thoughtbot/paperclip/commit/e1951ed0ef7bff9494a548e4a3dd2ce98ee6dfea
"Remove unused `:validations` option Fixes #786"),
[9ea4a9b](http://github.com/thoughtbot/paperclip/commit/9ea4a9bea42b615bf3973ebab2d1f1cc7f7b68a2
"Allow failing on jruby-19mode for now"),
[36d1289](http://github.com/thoughtbot/paperclip/commit/36d1289d0cd561e3b99ccfd8646b5ee9a6ec1ac4
"Clean up AttachmentContentTypeValidator conditions"),
[8390516](http://github.com/thoughtbot/paperclip/commit/8390516f435fd59cee08bb352041b2d1739a3a5a
"Remove version conditional from rake task"),
[b3f9690](http://github.com/thoughtbot/paperclip/commit/b3f96902acf7a4f595e97f27e5b4c42f7a76666d
"Bump to 3.0.0"),
[8e80310](http://github.com/thoughtbot/paperclip/commit/8e80310c27e3e98a12aa3905a850b440dc69705f
"Update README file mentioning new changes"),
[ee4107a](http://github.com/thoughtbot/paperclip/commit/ee4107ab0986c68c01de1ff28160e106e355e819
"Add `validates_attachment` method to model"),
[b3a63ed](http://github.com/thoughtbot/paperclip/commit/b3a63edb1705f75673fdb41f60691b0cc5065697
"Add Upgrading note"),
[8a758c2](http://github.com/thoughtbot/paperclip/commit/8a758c27de8786802881c06e3be77115996f7bf7
"Make the test pass on JRuby"),
[84d2d08](http://github.com/thoughtbot/paperclip/commit/84d2d087b6def29f46b318d4db5950167a5c2809
"Remove unused tests"),
[fe706c6](http://github.com/thoughtbot/paperclip/commit/fe706c69505f58394c95f0cebed54cad6a4276c4
"Remove Ruby 1.8 support"),
[b54904e](http://github.com/thoughtbot/paperclip/commit/b54904e0e46a421e4f5d6af3d034a3a72fc742c0
"Add #check_validity! to validators"),
[d3a7427](http://github.com/thoughtbot/paperclip/commit/d3a742755e3b0ffefcd73abe68fb193fd7cdd143
"Fix some errors on shoulda"),
[da5d716](http://github.com/thoughtbot/paperclip/commit/da5d716b97036dc8bffb3c3ff7a4876957fa7154
"Add AttachmentContentTypeValidator"),
[ee42b19](http://github.com/thoughtbot/paperclip/commit/ee42b198a45e44c6174870a6854adfb6d51f699e
"Add AttachmentPresenceValidator"),
[e83f88f](http://github.com/thoughtbot/paperclip/commit/e83f88f3c310dc9889ee608ba4c4b524a8cd972c
"Add AttachementSizeValidator"),
[03f777f](http://github.com/thoughtbot/paperclip/commit/03f777f88c6dc25949098eba2113ac6064bc637f
"Extract some modules from Paperclip.rb"),
[5232b19](http://github.com/thoughtbot/paperclip/commit/5232b192ddd958844d756a229e7cbdab91d745db
"Remove Rails 2 support from Paperclip"),
[19aedbc](http://github.com/thoughtbot/paperclip/commit/19aedbcbc9ba1bbc00857fcffd000d633b5b797d)).

Jon Yurek ([jyurek](http://github.com/jyurek)) merged in something he has been
working on: adapters for different types of I/O
([6c5fe19](http://github.com/thoughtbot/paperclip/commit/6c5fe19f466bdd89655b1e72190fc5e788c58584
"Remove .DS_Store"),
[e10edcd](http://github.com/thoughtbot/paperclip/commit/e10edcda67d552a723826961acd57752a54e2aa4
"Remove unnecessary step"),
[f4b6d48](http://github.com/thoughtbot/paperclip/commit/f4b6d48d1d8883f1a58460101c4d764f79628c82
"Removed pry"),
[78cfebd](http://github.com/thoughtbot/paperclip/commit/78cfebd5d06f99ae7a77f5fa55ceb8d993aac529
"Changes from merging with master/3.0"),
[89c8d11](http://github.com/thoughtbot/paperclip/commit/89c8d117e756815333a0e46d387cd64a1f4d37ab
"Adds IO adapters to abstract the things that can be assigned...")). Adding new
file-like things is now easier, including URLs that act like files. Yeah, that's
right.

Jon is so going to write a blog post about this with more explanations, after he
updates the README.

## Factory Bot[^1]

A bunch of fun commits to
[factory_bot](https://github.com/thoughtbot/factory_bot) this week. Chris
Griego ([cgriego](http://github.com/cgriego)) used pull requests as a forum to
promote his ActiveAttr gem
([81c9f2c](http://github.com/thoughtbot/factory_bot/commit/81c9f2c3dd81b2d709cb08d23673eec81b521c94
"Make step definitions more ORM agnostic by preferring .attribute_names...") and
[4e2a672](http://github.com/thoughtbot/factory_bot/commit/4e2a672b9e4a5f5860e552b5d40b1b0f02ddb45a
"Move attribute_names_for_model so steps are grouped together")). Joshua Clayton
([joshuaclayton](http://github.com/joshuaclayton)) added a `before_create`
callback
([24d417d](http://github.com/thoughtbot/factory_bot/commit/24d417d5754a82a796bc45f0bf765df844c8d206
"Add a before_create callback Closes #323")).

Vasiliy Ermolovich ([nashby](http://github.com/nashby)) used ActiveSupport for
deprecation warnings
([bca13f1](http://github.com/thoughtbot/factory_bot/commit/bca13f1165f5462f6891d2b1134c38e685b20088
"use AS deprecation warn, silence deprecations in specs") and
[28e3c25](http://github.com/thoughtbot/factory_bot/commit/28e3c25618398d52712592da5786c1f207881f4c
"AS::Deprecation prefixes messages with ")) and also made use of the
`singleton_class` method in Ruby 1.9
([08d01c1](http://github.com/thoughtbot/factory_bot/commit/08d01c1f98f15c6dd6bc3a22352194d01a62511d
"use singleton_class method from ruby 1.9")).

Mike Subelsky ([subelsky](http://github.com/subelsky)) fixed a typo in the docs
around the name `FactoryBot::Syntax::Methods`
([266b1d6](http://github.com/thoughtbot/factory_bot/commit/266b1d656ccf31742745832caedfe678083bb43c
"Fix name of FactoryBot::Syntax::Methods module in GETTING_STARTED.md")), Dan
Croak ([croaky](http://github.com/croaky)) mentioned the supported Ruby versions
in the README
([bed50ec](http://github.com/thoughtbot/factory_bot/commit/bed50ec3d152458f56889d0e10981dc559508933
"[#324] Add supported Ruby versions to README")), Josh renamed `Changelog` to
`NEWS` because that's exactly what it is
([4f5b775](http://github.com/thoughtbot/factory_bot/commit/4f5b775d7121afd51b6c4e611e27b895c6ce1806))
and also renamed `*rb` files to `*erb` to handle yardoc better
([a6ccbcb](http://github.com/thoughtbot/factory_bot_rails/commit/a6ccbcb9f61f67bff7390b020015aea2b1c1ccf8)).

## capybara-webkit

I totally dropped the ball on releasing a new version of
[capybara-webkit](https://github.com/thoughtbot/capybara-webkit) this week.
Sorry about that!  Joe Ferris ([jferris](http://github.com/jferris)), however,
refactored some of the C++, which is very welcome
([c2a2bd0](http://github.com/thoughtbot/capybara-webkit/commit/c2a2bd03761b25ae9e63f22935c8107f2b52f593
"Remove unneeded header") and
[4531f65](http://github.com/thoughtbot/capybara-webkit/commit/4531f65dc3b47979b6bba9b459b75d0302f30b7e
"Move logic to wait for pending page loads into a decorator")).

## appraisal

Some news in our [appraisal](https://github.com/thoughtbot/appraisal) gem this
week: Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) added a
contribution guideline
([fd05fdf](http://github.com/thoughtbot/appraisal/commit/fd05fdfa6d81e457e572f04470b56fc4a0516f88
"Add contribution guidelines.")), then osheroff fixed appraisal to handle weird
filenames
([1d4fa93](http://github.com/thoughtbot/appraisal/commit/1d4fa937ef73d18e9b7045dd6328da6019f38581
"add spec for cleaning up appraisal name"),
[b21220a](http://github.com/thoughtbot/appraisal/commit/b21220a0efeb9cd8722e90b2e0cf5a667a554fe9
"spaces to underscores in clean_name"), and
[75a4970](http://github.com/thoughtbot/appraisal/commit/75a49708f60a5589bb51a82332ad2c7782f37014
"clean up appraisal names for gemfile path")).

[^1]: Looking for FactoryGirl? The library was renamed in 2017.
[Project name history can be found here.](https://github.com/thoughtbot/factory_bot/blob/master/NAME.md)
