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

A somewhat lighter week of pull requests. Perhaps we were super busy; I know we were obsessesed with refactoring.

## kumade

Our Heroku deployer, [kumade](https://github.com/thoughtbot/kumade), is being used as a series of refactoring lessons toward cleaner code. [Unobtrusive Ruby](https://thoughtbot.com/blog/post/10125070413/unobtrusive-ruby) uses more classes, and they are doing that like whoa here. Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) is leading the charge, switching to Mocha and Bourne ([57a4c7f](http://github.com/thoughtbot/kumade/commit/57a4c7f2ebd03c253f3643f0fb0f924f5cf56a07 "Let") and [530c137](http://github.com/thoughtbot/kumade/commit/530c1376ebc2b73c13751585f3d0ecf299f8ab20 "You wanna use Bourne? Then let")), making a Heroku class ([82c75d2](http://github.com/thoughtbot/kumade/commit/82c75d2320ca350e41e08ace801c0d895d1288e3 "Add Heroku class")), and making a Configuration class for internal use ([469761b](http://github.com/thoughtbot/kumade/commit/469761b791e9fbb20783b063ce9cabe2357e5665 "Use Kumade::Configuration to handle environment and pretending.") and [681bc8f](http://github.com/thoughtbot/kumade/commit/681bc8fa372c4fedf8a6bfc1621614d436e98d66 "First crack at Kumade::Configuration")). The tests saw major improvements from this, with shared contexts and better stubbing ([bd93c9d](http://github.com/thoughtbot/kumade/commit/bd93c9d958bbf7d4c7525010759fda1c11e341ad "Let"), [15a65df](http://github.com/thoughtbot/kumade/commit/15a65df2ee12e42d389562f973a241992827e9d2 "Get to green"), [ea5331d](http://github.com/thoughtbot/kumade/commit/ea5331de2dcf5d2e0ecdbf8c7e4dc9d12bee5717 "Cleanup"), [7c20edc](http://github.com/thoughtbot/kumade/commit/7c20edc4ea711ff4d7a8a5210638d49aef92ead0 "A lot less subject.stub. Really test for Cedar."), [40882df](http://github.com/thoughtbot/kumade/commit/40882dfb60cd72128de09271e9fb7b2cf9bb0b21 "Clean up base spec, less stubbing of subject"), [30e0b3e](http://github.com/thoughtbot/kumade/commit/30e0b3e3d60ea865e7aa0010148ea66f004db3a0 "Remove some more subject stubbing"), [5b66e24](http://github.com/thoughtbot/kumade/commit/5b66e2407d7fc477de6b4a0edc9a104725a8ae2c "Cleanup"), [7c147ae](http://github.com/thoughtbot/kumade/commit/7c147ae4402691e70fc7abe6a8b404483e2dc1b3 "Don"), [be5de51](http://github.com/thoughtbot/kumade/commit/be5de51d18751cd79b59dedc2a5b5764ae8635a0 "Clean up spec (typos, more context)"), and [ee40dbb](http://github.com/thoughtbot/kumade/commit/ee40dbb5bbece19ea3f8f1718941701c066b74fb "Clean up spec.")). He updated the README to explain that Kumade is no longer a set of Rake tasks ([abb3609](http://github.com/thoughtbot/kumade/commit/abb360959b2b33d2843e051efb4a7c64e7678fbd "Kumade is not a set of Rake tasks.")) then removed the rookie mistake of using `!!` to turn a truthy value into a proper Boolean ([4279a2f](http://github.com/thoughtbot/kumade/commit/4279a2f68a1bf24044a1aa43d817f581ecda846e "Remove !!@pretending")).

Ever committer Marcos Tapajos ([tapajos](http://github.com/tapajos)) fixed the README to say `staging` instead of `bamboo` ([ee04efc](http://github.com/thoughtbot/kumade/commit/ee04efce1904c256be4f53614dd1bae944f950ee "Update README. Thanks, @tapajos.")) and also removed references to running the tests ([56fd720](http://github.com/thoughtbot/kumade/commit/56fd720571c51bb29aad85053731b5b78c0ad571 "It is not true")), added a `-v` verbose flag ([16e8482](http://github.com/thoughtbot/kumade/commit/16e8482bd7061652ccb1df31c769fdb3caadb5c9 "Merge pull request #35 from tapajos/verbose
Verbose mode") and [5a4af13](http://github.com/thoughtbot/kumade/commit/5a4af131b09566acf15d7da293c57e11f7607354 "Merge branch ")), got in on the making-things-into-classes fun with a Packager class ([56b11b3](http://github.com/thoughtbot/kumade/commit/56b11b392ca05d5d1459cb16d88ca5e2e39f7b41 "Create Kumade::Packager. More one step to close issue #7.")), and fixed an infinite recursion bug on Heroku Cedar ([645014c](http://github.com/thoughtbot/kumade/commit/645014cc96e6462cee3f5ce68705e5b297c1eb3f "Fix issue #38")). He also bumped the version; I don't know how Gabe feels about this ([153316a](http://github.com/thoughtbot/kumade/commit/153316adb975121024d4cee720ede65b2887f09a "Bump version.")).

Our Josh Clayton ([joshuaclayton](http://github.com/joshuaclayton)), who loves adding classes, cleaned up the Configuration class ([fe4be8b](http://github.com/thoughtbot/kumade/commit/fe4be8bccbec904ca9ce581be054f24306453a85 "Remove unused config constructor")) before adding a<abbr title="Command Line Interface">CLI</abbr>class ([2879fbc](http://github.com/thoughtbot/kumade/commit/2879fbc5e2588aadedc72f7b9a31ae6e052eca1c "Allow Kumade::CLI to be initialized")).

## paul_revere

The one-off announcement system for Rails, [paul_revere](https://github.com/thoughtbot/paul_revere), saw README updates from Matt Jankowski ([mjankowski](http://github.com/mjankowski)) where he showed the pass/fail status in public ([3881938](http://github.com/thoughtbot/paul_revere/commit/3881938b057e08aa76a29ded9c38a116a7444462 "Show travis status!")) and a tiny formatting change ([6b3d2cf](http://github.com/thoughtbot/paul_revere/commit/6b3d2cf6b1847f84e9eed45ac59189fce9f8a177 "Call the classes classes.")).

## shoulda-matchers

Our [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers) gem, which is a collection of RSpec and Test::Unit matchers/assertions, saw some continuous integration fixes and some test fixes to make it all work. Prem Sichanugrist ([sikachu](http://github.com/sikachu)) stayed atop Travis CI, making it more resilient to edge cases ([8007a1a](http://github.com/thoughtbot/shoulda-matchers/commit/8007a1ac233771ff464177f22267632edb4ecb25 "[Travis] Make sure the known_hosts file exists"), [45242cf](http://github.com/thoughtbot/shoulda-matchers/commit/45242cf91aece5aa64119cc38526187277705bbb "Add another server of Github to known hosts"), [a1eb080](http://github.com/thoughtbot/shoulda-matchers/commit/a1eb080d1268eab27b3c4bf75e171a51a5d20966 "Tell Travis CI to use the correct gemfile"), and [272699f](http://github.com/thoughtbot/shoulda-matchers/commit/272699f312573d5f9c356e841544fa2ce47ca747 "Add travis build")). The tests themselves were made more resilient, fixing the dependencies ([78b5e5f](http://github.com/thoughtbot/shoulda-matchers/commit/78b5e5f4364de5e6aa4663b78366259498c605b0 "Update testing dependencies")), only modifying the Gemfile as needed ([94aacd8](http://github.com/thoughtbot/shoulda-matchers/commit/94aacd8fd0b297012ebccf0e3e67a3e06b2c0768 "Do not append the path to Gemfile if path is already appended")), and adding a missing table ([3e6463b](http://github.com/thoughtbot/shoulda-matchers/commit/3e6463bbc5c45e24e55c5ff66727acd0671706a1 "Also create a joined table so the test won")). Also, watch your whitespace ([a6fa83e](http://github.com/thoughtbot/shoulda-matchers/commit/a6fa83e18c30eb8b5e9c4e3313c7e8bd9ca73ced "Fix whitespace"))!

## copycopter_client

The client for our Copycopter product, [copycopter_client](https://github.com/copycopter/copycopter-ruby-client), was updated for Rails 3.1. Joe Ferris ([jferris](http://github.com/jferris)) adding support for the `DEBUG` environment variable during the test run ([556bb30](http://github.com/copycopter/copycopter-ruby-client/commit/556bb309db70cd5654ef8eb089a57cee1b358ca8 "Easier debugging for the fake copycopter app")), which I'm sure helped him track down the fact that it needs to send the `application/json` MIME type ([eb8b45c](http://github.com/copycopter/copycopter-ruby-client/commit/eb8b45c3bc3897b9f94971b9b34d322dec656eb6 "Send mime type for JSON when uploading")), throw exceptions instead of raising them, and skip bundler for 3.1.0 ([70fd5ca](http://github.com/copycopter/copycopter-ruby-client/commit/70fd5ca2ca522a2a086ad247e725d82cc51237bc "Updates for Rails 3.1, I18n 0.6")). He also handled more SSL errors ([e72f2a6](http://github.com/copycopter/copycopter-ruby-client/commit/e72f2a654e637425f3933d774834b78b8c42fa73 "Rescue SSL and connection refused errors")). This all ended with _the release of version 1.1.1 of copycopter_client_ ([d2b2f28](http://github.com/copycopter/copycopter-ruby-client/commit/d2b2f284bc5f251d635da368c283fcf85c33a2dd "Bump to 1.1.0") and [b74ad61](http://github.com/copycopter/copycopter-ruby-client/commit/b74ad613c67798eb2b4e726cadfcb23dbcc93cd8 "Bump to 1.1.1")).

## pacecar

Our automatic ARel methods, [pacecar](https://github.com/thoughtbot/pacecar), was updated by Matt Jankowski ([mjankowski](http://github.com/mjankowski)) to run CI using 1.9.2 ([b430f50](http://github.com/thoughtbot/pacecar/commit/b430f50af97b892cef4d50f72a7b49622bc2c234 "use 1.9.2 on travis")).

## flutie

Our base stylesheet gem, [flutie](https://github.com/thoughtbot/flutie), also saw improvements from Matt Jankowski ([mjankowski](http://github.com/mjankowski)). The README was updated to use a code block for the examples ([cf35a18](http://github.com/thoughtbot/flutie/commit/cf35a18bfe74f763580a018e1da83be537390bc3 "Make the stylesheet link tag example in the readme into a code block")) and show Travis CI results ([e99ab3d](http://github.com/thoughtbot/flutie/commit/e99ab3d5438de5763285adecbb302772c87e72be "Display travis status via README") and [457a7aa](http://github.com/thoughtbot/flutie/commit/457a7aa94417ee8b54e3306ecbbfffb42d649f84 "Travis branch option seems to be broken?")). The specs were updated to use an in-memory database instead of writing to disc ([356f05d](http://github.com/thoughtbot/flutie/commit/356f05d2984d3d423d5579fc73e02706aef181d6 "use in memory sqlite db")). Then a bug was discovered: the Rake task was not copying files into your app properly. Fixed ([bc70e1b](http://github.com/thoughtbot/flutie/commit/bc70e1b093ea938d71aeba9216931b74b70ceac7 "correct rake task to not move directories, only move files")) and _released as 1.3.2_ ([4b37b89](http://github.com/thoughtbot/flutie/commit/4b37b89fcb52c188b1cd20327f0e7fe933f4bb09 "bump the version")).

## paperclip

Finally, a light week for [paperclip](https://github.com/thoughtbot/paperclip), our Rails image uploader gem, and all to the README. goutham ([gouthamvel](http://github.com/gouthamvel)) documented how to use Paperclip outside of Rails but with ActiveRecord ([487ab74](http://github.com/thoughtbot/paperclip/commit/487ab74da0ac3b7b9ab57eba3d7d5215007e349f "fixes the markedown formating") and [e4339af](http://github.com/thoughtbot/paperclip/commit/e4339aff66da991a2ccb00f4cd962847a01ff4c3 "Updated README for non-rails usage.")) while Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) fixed typos ([f12e2e8](http://github.com/thoughtbot/paperclip/commit/f12e2e86c688155a2c47f638feeb54e3be8ee392 "Whitespace and typos.")).

## factory_bot[^1]

Likewise, another light week for [factory_bot](https://github.com/thoughtbot/factory_bot), our test fixture gem. Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) fixed the formatting of the getting started document ([67fc3bc](http://github.com/thoughtbot/factory_bot/commit/67fc3bc8a93680ed2d91fa8ba466b1827efefcdd "Whitespace, textwidth, and escaping underscores.")). Omar Vargas ([ovargas27](https://github.com/ovargas27)) pointed out the cucumber `env.rb` file ([c09ec8e](http://github.com/thoughtbot/factory_bot/commit/c09ec8e2fec921dceb23e130e18906f79afc1ad3 "Merge pull request #201 from ovargas27/master

More specific instructions for cucumber integration"), [6c30ae3](http://github.com/thoughtbot/factory_bot/commit/6c30ae380e330af8c2d1a1aa6f6c6f9ed643d76c "Even more specific instructions for cucumber integration"), and [677341b](http://github.com/thoughtbot/factory_bot/commit/677341b681aecdd9f5c5c16738f268890d3112eb "More specific instructions for cucumber integration")). Joe Ferris ([jferris](http://github.com/jferris)) bucked the trend of modifying the getting started document to instead make Travis CI only build the master branch ([861e70e](http://github.com/thoughtbot/factory_bot/commit/861e70e28d8bc1f5bc4b71ef115e580bec9a721c "Only build master in travis")).

## capybara-webkit

Our headless JavaScript test driver, [capybara-webkit](https://github.com/thoughtbot/capybara-webkit), saw a bug fix from Matthew Mongeau ([halogenandtoast](https://github.com/halogenandtoast)) and Joe Ferris ([jferris](https://github.com/jferris)). They discovered that a HTTP POST that is then followed by a redirect re-sends the `Content-Type` header, leading to subtle bugs. This is now fixed ([25fe9be](http://github.com/thoughtbot/capybara-webkit/commit/25fe9befaced15ac80bcdc7d18f27ad39cdeff5b "Redirects should not send content type. Fixes #162")). Joe also added more info on QT to the documentation wiki ([c5e6396](http://github.com/thoughtbot/capybara-webkit/commit/c5e6396b6b0e62a1ceaf3e528151d76916f6b55b "Moved info about installing QT into the Wiki")).

[^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)
