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

## kumade

This week our Heroku deployer, [kumade](https://github.com/thoughtbot/kumade), saw some refactoring and some features. Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) marked slow cucumber tests as `@slow` ([40c6803](http://github.com/thoughtbot/kumade/commit/40c6803eadd0bfd29e0852f3a9f1eddc7ab2a960 "Better cucumber tag name.")), fixed the check for the Heroku Cedar stack ([4b7358e](http://github.com/thoughtbot/kumade/commit/4b7358eb029dd98656a77a61d814c8fa80014898 "CommandLine#run_or_error now returns the result of running the command. This fixes the broken check for the Cedar stack."), [3180ad2](http://github.com/thoughtbot/kumade/commit/3180ad2ea6589d4034b4856d04be64a42d14b2f5 "Match the actual output of the heroku stack command."), and [61d3ee8](http://github.com/thoughtbot/kumade/commit/61d3ee853bd40e06fd287134ff7aeb3c3c01caba "Clean up heroku spec support.")), and cleaned up the README ([c0d12cb](http://github.com/thoughtbot/kumade/commit/c0d12cbd5c87abcf69b9e5a9771bd1035b7bb53f "Use regular markdown.")). He removed the intrusive Thor from the app ([dc25839](http://github.com/thoughtbot/kumade/commit/dc2583902a86f3947464f66751c3beaf51d709d2 "Be more explicit about what we"), [e419061](http://github.com/thoughtbot/kumade/commit/e419061054971c61522e7da125a539adc0196ed7 "Fix outputter spec for 1.8.7."), and [0c8414d](http://github.com/thoughtbot/kumade/commit/0c8414d86a22a2938ed943bab4fd7f609b3b2c37 "Remove thor.")). He ensured the the no-op packager is never installed ([0e4cdc3](http://github.com/thoughtbot/kumade/commit/0e4cdc3235b0c47782a0850f2c1956787d88e7e6 "No-op packager is never installed.")) and added a `COVERAGE` environment flag to produce code coverage output ([bda3067](http://github.com/thoughtbot/kumade/commit/bda30675a9f78f2929e1a941836e5ea94afe2584 "Only run coverage if COVERAGE is set.") and [e260283](http://github.com/thoughtbot/kumade/commit/e2602832e7a0d71d20c3362b8c2b63ca736001f7 "Install SimpleCov if on 1.9.x")).

Gabe and hoverlover ([hoverlover](http://github.com/hoverlover)) updated Kumade to restart the Heroku app after migrating ([99a14b7](http://github.com/thoughtbot/kumade/commit/99a14b73fcb346ad5b466fdade729041cfa86af6 "Kumade now restarts Heroku app after db:migrate."), [e9aa04a](http://github.com/thoughtbot/kumade/commit/e9aa04a9495648df23089eb33d88c431f88a9f5c "Update README."), and [781dd0d](http://github.com/thoughtbot/kumade/commit/781dd0deb1c7b8dd4b137e77c6c6bdc16e123fdc "Get to green.")) and then Gabe _released version 0.7.0 of kumade_ ([60fb782](http://github.com/thoughtbot/kumade/commit/60fb7823c77d0b0ec46d1c1eb8a867d76135b945 "Bump to 0.6.0") and [f1ac4c3](http://github.com/thoughtbot/kumade/commit/f1ac4c345a43c1b8b396e1331528a182c4ebe8ae "Bump to 0.7.0 for working Cedar check.")).

## suspenders

We have a gem that makes Rails apps, named [suspenders](https://github.com/thoughtbot/suspenders). There's even a nice mascot to go along with it. Anyway, this week Dan Croak ([croaky](http://github.com/croaky)) cleaned it up a bit: he upgraded clearance  to 0.13.0 ([6c2d39f](http://github.com/thoughtbot/suspenders/commit/6c2d39f719d80d5818c6e28c233e920ffe41a01c "upgrade clearance to latest (0.13.0)")), defaulted to ruby-debug for <abbr title="Matz' Ruby Interpreter">MRI</abbr> 1.9.<var>x</var> ([56fd39e](http://github.com/thoughtbot/suspenders/commit/56fd39e5a0c7d31b377d5fe941fc718655885e86 "we should be using ruby 1.9 on all new projects so changing default ruby-debug to be used on MRI 1.9")), upgraded cucumber-rails to the controversial 1.1.0 ([e2a8f47](http://github.com/thoughtbot/suspenders/commit/e2a8f472ecbe21ebd9ffa27cb97dc85d9d881a00 "upgrade to latest cucumber-rails (1.1.0). this change will remove features/support/paths.rb, features/support/selectors.rb, and features/step_definitions/web_steps.rb in generated apps.")), added thin for Heroku ([9be97e7](http://github.com/thoughtbot/suspenders/commit/9be97e7ea1e160257c8c295bdc6d1175ab41147a "Adding a basic Procfile for use with Heroku") and [4c78926](http://github.com/thoughtbot/suspenders/commit/4c789266203a5f0be0c0913561f40045e9c619ed "Use Thin in all environments. We")), removed RedCloth ([91ec5a8](http://github.com/thoughtbot/suspenders/commit/91ec5a816da5f56f63b15c463e81b3b3391038fb "Redcloth/Textile is too rarely used in our apps to still be included in Suspenders")), updated the README to explain the system dependencies ([9900d15](http://github.com/thoughtbot/suspenders/commit/9900d1590bfd5ec16960fc0942277155d4f2af25 "adding a note in README about needing GCC to bundle gems with native extensions and QT to bundle capybara-webkit")), and changed the template to output explanations with less emotion ([4bab3f0](http://github.com/thoughtbot/suspenders/commit/4bab3f0fbc88f9de87258b347eb279a2b558661d "formatted the template so it")). It's in better shape now!

## shoulda-matchers

New features this week in our collection of RSpec matchers, [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers)! Vasiliy Ermolovich ([nashby](http://github.com/nashby)) brings us `it { should ensure_exclusion_of(:age).in_range(30..60) }` ([d8308ec](http://github.com/thoughtbot/shoulda-matchers/commit/d8308ec74d64306baa4fb44a5216fef4b78b11fa "add ensure_exclusion_of")). He also brought in the `:partial` option for the `render_template` matcher ([16eb4aa](http://github.com/thoughtbot/shoulda-matchers/commit/16eb4aa78da21a3b24d191cccb2600941d1507d8 "render_template compatible with assert_template, closes #21")). Speaking of options, Markus Schwed ([SweeD](http://github.com/SweeD)) sent a `class_name` option for the association matcher, like `it { should have_many(:friends).class_name('Buddy') }` ([17ac7d5](http://github.com/thoughtbot/shoulda-matchers/commit/17ac7d5a36ba8958ebfda5d36189888ea0f38c98 "Added class_name option matcher to association_matcher")).

Dan Croak ([croaky](http://github.com/croaky)) removed the deprecated `rake/gempackagetask` in favor of `rubygems/package_task` ([ead1e1d](http://github.com/thoughtbot/shoulda-matchers/commit/ead1e1d42c597565553f5c2d5ac58f1ffd1d9672 "rake/gempackagetask is deprecated.  Use rubygems/package_task instead")) and ironically removed the word "should" from the tests for the `render_template` matcher ([030da4a](http://github.com/thoughtbot/shoulda-matchers/commit/030da4a84ecafd22885da6d217440294856a77eb "s/should reject/rejects, s/should accept/accepts in spec suite.")).

## bourbon

Short week for [bourbon](https://github.com/thoughtbot/bourbon), the collection of Sass mixins: Phil LaPier ([plapier](http://github.com/plapier)) added a `border-image` mixin and _released version 1.1.0 of bourbon_ ([80027f2](http://github.com/thoughtbot/bourbon/commit/80027f214a01d96b3dd0a1cfd993cd767ff792d2 "Added Border-image mixin. Bump to v1.1.0")).

## pacecar

Also a short, but important, week for the [pacecar](https://github.com/thoughtbot/pacecar) collection of named scopes, when Thomas Dippel ([dipth](http://github.com/dipth)) fixed the spelling of the word "maximum" in the README ([91f56cb](http://github.com/thoughtbot/pacecar/commit/91f56cbf4f19ee725776024cf8627024e9d0fac2 "Fixed a small typo")).

## paperclip

Lots of love to our [paperclip](https://github.com/thoughtbot/paperclip) file uploader. Alexander Presber ([momolog](http://github.com/momolog)) exposed the S3 permissions data ([f409693](http://github.com/thoughtbot/paperclip/commit/f40969342eec12c278f0cc890643c024d87af423 "expose s3_permissions analoguous to s3_protocol")), useful for testing and fixing a bug in them ([3a6ca7d](http://github.com/thoughtbot/paperclip/commit/3a6ca7d9c7ba6a6ccd751bb1a10721e3798b5b66 "fixed wrong permissions (") and [1571290](http://github.com/thoughtbot/paperclip/commit/15712902d8136fc0b46c3c8b26da51113a5cc1d5 "require pathname
formulate assert conditions")). Joern Barthel ([yawn](http://github.com/yawn)) exposed the uploaded file as `uploaded_file`> ([24b0c5a](http://github.com/thoughtbot/paperclip/commit/24b0c5adbc3f05b8f3356611329127c7ff6c9311 "Added uploaded_file instance variable for new assigns")), and then Overbryd ([Overbryd](http://github.com/Overbryd)) decided to only write the uploaded file if the uploaded file is present ([7cc0921](http://github.com/thoughtbot/paperclip/commit/7cc0921aeef88bd473c1af92bcd79d5777a7e3f4 "Added a test for Attachment#uploaded_file")). Ken Collins ([metaskills](http://github.com/metaskills)) fixed the `fog_public` attribute reader to produce the false value as needed ([de9a94a](http://github.com/thoughtbot/paperclip/commit/de9a94a5d0cc3a8a8572c4bef595ed04461cff29 "Allow :fog_public to be set to false and read as false from #fog_public accessor.")). ramn ([ramn](https://github.com/ramn)) made single-table inheritence, cached classes, and paperclip work together again ([2c6b7cb](https://github.com/ramn/paperclip/commit/2c6b7cb06a016ef147511a10303d207181022e32 "Problem: When using STI, and when ")).

In features, Tim Assmann ([aka47](http://github.com/aka47)) made it such that the S3 permissions could be a `Proc` object in addition to a normal hash, for run-time configurability ([2191934](http://github.com/thoughtbot/paperclip/commit/21919348c3ee3980dc7bd1bc1ff9e943be134735 "added support for a proc to set s3_permission with specs, still needs a bit of work")). Kelley Reynolds delayed the S3 connection until the user directly accessed the S3 object or bucket ([774cee1](http://github.com/thoughtbot/paperclip/commit/774cee152e110c134276f3d98e9a913a2992a4a6 "Only establish an S3 connection if required.")).

Prem Sichanugrist ([sikachu](http://github.com/sikachu)) and Jon Yurek ([jyurek](http://github.com/jyurek)) have been cleaning and fixing paperclip: Prem cleaned the whitespace ([64549cb](http://github.com/thoughtbot/paperclip/commit/64549cb4f51f247e1ca3026ac6b7395717b1d2ab "Fix spacing problem")), copied the rake tasks into place on Rails 2.3 ([948ddfa](http://github.com/thoughtbot/paperclip/commit/948ddfa555cca195ad22fbe505a39765192fc63e "Make sure that we")), and fixed the `paperclip:clean` rake task to run again without errors ([cd856aa](http://github.com/thoughtbot/paperclip/commit/cd856aa021aaf053ca4b99e56894822615458585 "Update rake task to fix issue with `rake paperclip:clean` Closes #602")). Jon attempted to fix the URL autoescaping ([131a8b1](http://github.com/thoughtbot/paperclip/commit/131a8b1b5c5b3cd24197074e95c9eaf814d74433 "Remove the interpolated_string requirement. That was dumb.") and [4917ab2](http://github.com/thoughtbot/paperclip/commit/4917ab2fba921e8d3e62bb834b3fc2f97d0356eb "Sidestep the whole escaping issue by telling url not to escape in interpolations")), fixed `validates_attachment_presence` ([cd53485](http://github.com/thoughtbot/paperclip/commit/cd534851758c3c06b2171edeef2c4716326d60e3 "Errors on presence get added to :attachment and :attachment_file_name") and [61a0536](http://github.com/thoughtbot/paperclip/commit/61a05368ab5298171bc70209ef2c4f184643bfad "Fixes validates_attachment_presence just flat out not working")), and added backward compatibility for `Attachment#url` ([93faccf](http://github.com/thoughtbot/paperclip/commit/93faccfa6d5f95749b508ed86c93e9a297eeb113 "Attachment#url")).

Then Jon _released paperclip 2.4.5_ ([94d35f9](http://github.com/thoughtbot/paperclip/commit/94d35f98664ff35d233df933be74143a98245ce9 "Bump to 2.4.4") and [75ba69d](http://github.com/thoughtbot/paperclip/commit/75ba69dacbcfee27aaf7d8e523b2b31d90d5c505 "Version 2.4.5")).

## factory_bot[^1]

Let's start with the refactorings this week for our test fixture gem, [factory_bot](https://github.com/thoughtbot/factory_bot). Joshua Clayton ([joshuaclayton](http://github.com/joshuaclayton)) moved the proxy strategy checks to the proxy class itself ([a09ec68](http://github.com/thoughtbot/factory_bot/commit/a09ec68b4aeee848e85ea11b3cf4467deac919ec "Move proxy strategy checking to proxy")). He removed some private methods by leaning on `Hash#except` from ActiveSupport ([eb73dc1](http://github.com/thoughtbot/factory_bot/commit/eb73dc1979d317460aa85eaa940b0127bdca3e57 "Use active support")). He removed the `parse_method` abstract factory method, removing more lines than he added ([50a66d0](http://github.com/thoughtbot/factory_bot/commit/50a66d053dac89327c0dcff3352048ee85e62a47 "Initial pass at removing parse_method and cleaning up :build vs :create for associations")). In an effort to reduce conditionals he now always passes callbacks to proxies ([8f4e052](http://github.com/thoughtbot/factory_bot/commit/8f4e052a85891237a89d10292a4f85285b43e393 "Proxies are always instantiated with callbacks")). Some method names were changed ([369b4b9](http://github.com/thoughtbot/factory_bot/commit/369b4b9dcc09eb0870bc13cd942a3eb4eac04843 "Clean up method names")), a private `Factory::Runner` class was made to abstract out the actual factory creation ([105d972](http://github.com/thoughtbot/factory_bot/commit/105d972aa899f50015e7261c76d64009e1da6a44 "Extract complicated runner code into private class Factory#run was getting confusing - it added callbacks to the proxy,
iterated over all attributes and operated on the proxy depending on if
there were overridtes, mutated the overrides hash, and then operated on
the mutated hash afterwards. This logic has been extracted into a
private Factory::Runner class. The goal is to make it easier to
understand everything that")), some whitespace was removed ([65fc7d7](http://github.com/thoughtbot/factory_bot/commit/65fc7d7eb1de4dedd0b80f6de4e92a9c922ed823 "Clean up attribute_list")), and ActiveSupport's `delegate` method was used to remove some method definitions ([9e88eb1](http://github.com/thoughtbot/factory_bot/commit/9e88eb10de723918582881e095f61c19300b846d "Use delegation from AS")).

Featurely, attribute lists are now named, which lead to them checking for infinite loops ([e3bf491](http://github.com/thoughtbot/factory_bot/commit/e3bf491dd6af2b6c5c110c4a795db65bb458e3da "Attribute lists can be named This allows us to move self-referencing logic into AttributeList and
just delegate to define_attribute from Factory. This means that once define_attribute is private, Factory will only need to remove the delegation.")). Registries of factories, traits, and sequences are now named, too, leading to better error messages ([7fdf1a8](http://github.com/thoughtbot/factory_bot/commit/7fdf1a8858c5185e9a38d21348c8ec0fba404f22 "Registries are named This allows for easier debugging when code attempts to access traits,
sequences, or factories and doesn")). The spec for a proxy definition was cleaned up with a `MockFactory` class and some exposed matchers; you may find these useful if you are building a gem atop FactoryBot ([6e9baa7](http://github.com/thoughtbot/factory_bot/commit/6e9baa767fe0f344f2cd498992d500ad246ad604 "Maintain abstraction consistency within definition_proxy") and [180eb8b](http://github.com/thoughtbot/factory_bot/commit/180eb8bec704558a52cf3a13ec2c88d9d9758bcb "Refactor definition_proxy_spec This introduces a couple of things: firstly, there")).

Outside of Josh's commits, Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) got rcov working ([895bc08](http://github.com/thoughtbot/factory_bot/commit/895bc08df20e4da838f86431737a950b19637f22 "Working rcov Rake task. Closes #218")) and Paco Guzman ([pacoguzman](http://github.com/pacoguzman)) totally called us out on using our `Attribute::Dynamic` class incorrectly ([e1ece10](http://github.com/thoughtbot/factory_bot/commit/e1ece10ec243eb23058a758beae83cb98d547156 "Use correct parameters in specs for FactoryBot::Attribute::Dynamic class Closes #217")).

And then Josh _released FactoryBot 1.3.0_ ([1267f5a](https://github.com/thoughtbot/factory_bot_rails/commit/1267f5adceb5b3ef98194d9abbd7ecc5a993ff64 "Update dependency to Factory Bot 2.2") and [bf6acea](http://github.com/thoughtbot/factory_bot_rails/commit/bf6acea862605d587ad7c0c302b6536a585be194 "Bump version to 1.3.0")).

## capybara-webkit

A whole boatload of commits to our sweet JavaScript test runner named [capybara-webkit](https://github.com/thoughtbot/capybara-webkit). On the refactoring front, Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) removed unused global variables from the self-signed cert spec ([b4faa3a](http://github.com/thoughtbot/capybara-webkit/commit/b4faa3ab6b1e64b3a893e1ee166aa3cbacd1b552 "Remove some unused global variables.")). OK, check.

In terms of fixing bugs, Matthew Mongeau ([halogenandtoast](http://github.com/halogenandtoast)) set the viewport size so `overflow: hidden` registered visibility properly ([8d2251d](http://github.com/thoughtbot/capybara-webkit/commit/8d2251de38fd2a046ef085e0285b7cbf289369d6 "Set viewport size so overflow hidden doesn")). He also made sure that only processes that started the webkit server could stop it ([3eb366e](http://github.com/thoughtbot/capybara-webkit/commit/3eb366e011b821ae2843a48cd52739be359f88d0 "Only allow process that started server to shut it down.")). Andrew Wason ([rectalogic](http://github.com/rectalogic)) fixed the C++/Qt to have the proper signature for `connect` ([9cfc6b1](http://github.com/thoughtbot/capybara-webkit/commit/9cfc6b10f1f03ad0416e7498b502fe153b76ae63 "Fix slot signature.")). Niklas Baumstark ([niklasb](http://github.com/niklasb)) noted that `IO.popen` takes a string in Ruby 1.8.7 ([3b872c6](http://github.com/thoughtbot/capybara-webkit/commit/3b872c617ba73eb3ef2f0d46e1cc6560ec28c25f "IO.popen doesn")).

Then onto features, Andrew set it up to ignore SSL errors, as desired ([f57b3a3](http://github.com/thoughtbot/capybara-webkit/commit/f57b3a3d151e18da88ae61885b266c2bcf091f62 "Make ignoring SSL errors an option. webkit_server takes an --ignore-ssl-errors argument."), [053010a](http://github.com/thoughtbot/capybara-webkit/commit/053010a3a4c476f52b13084f29ba054ed234aeac "Ignore SSL errors."), and [a08e5e8](http://github.com/thoughtbot/capybara-webkit/commit/a08e5e8794610a569c11b541576cdafc57b301ac "adds Ruby-side configuration options and specs for ignoring SSL errors.")). Niklas added a HTTP proxy option ([229a20e](http://github.com/thoughtbot/capybara-webkit/commit/229a20e89797aad549452f00969b3616bd0dfbd2 "remove call to `Socket#shutdown`"), [6a4143c](http://github.com/thoughtbot/capybara-webkit/commit/6a4143c267b2af211a99e5297849f21638af9b29 "fixes wrongly used call to `Socket#shutdown`"), [e442150](http://github.com/thoughtbot/capybara-webkit/commit/e442150a6a0f18146459bbce92b98d3fb6a4a328 "close socket after test"), [25281b7](http://github.com/thoughtbot/capybara-webkit/commit/25281b77dcd756458b106b9620adbab4bb31bdb8 "add option to set an HTTP proxy"), [d59e36b](http://github.com/thoughtbot/capybara-webkit/commit/d59e36b8db2b4858c4595067d9727075733d5925 "remove call to `Socket#shutdown` refs #176"), [a0d4a21](http://github.com/thoughtbot/capybara-webkit/commit/a0d4a21fd3fec5441e257c62030e46d47f20af56 "fixes wrongly used call to `Socket#shutdown` refs #176"), [bb80506](http://github.com/thoughtbot/capybara-webkit/commit/bb8050696c098485edaa1158839fc89d9f6da464 "really shutdown test HTTPS server."), and [d348e20](http://github.com/thoughtbot/capybara-webkit/commit/d348e203a8ff03dae9398becc96b1371b5971fa9 "kill HTTPS server after usage, don")) and made cookeis easier to access ([3bce3d7](http://github.com/thoughtbot/capybara-webkit/commit/3bce3d7703b65cb87a17d82263be4e550b7dfaa0 "restructure specs for CookieJar. Adds specs for #find method") and [ce198ab](http://github.com/thoughtbot/capybara-webkit/commit/ce198ab4944ef20b5b935cfa3b85d3c547462a00 "removes useless block")).

## dotfiles

Progressing forward on our ready-to-use config files: [dotfiles](https://github.com/thoughtbot/dotfiles). Mark Wolfe ([wolfeidau](http://github.com/wolfeidau)) removed the need for bash ([b89501e](http://github.com/thoughtbot/dotfiles/commit/b89501eedece103cf7213ed3c5f57d494c9e791b "Now posix compatible and I have removed the use of tail -r")), which is awesome because I don't like bash. Thanks, Mark!

## clearance

Minor infrastuctural change to [clearance](https://github.com/thoughtbot/clearance): Dan Croak ([croaky](http://github.com/croaky)) used the Bundler rake tasks to make new releases ([4b4c251](http://github.com/thoughtbot/clearance/commit/4b4c25171b222aa4e5058d0e8602d44777d1d871 "adding rake build/install/release tasks via Bundler so I won")). He did not yet make a new release in celebration.

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