---
title: This week in open source
teaser:
tags: news,open source
author: Mike Burns
published_on: 2012-01-13
---

## Deprecations

We have officially stopped maintaining the following open source products:
[limerick_rake](https://github.com/thoughtbot/limerick_rake),
[trout](https://github.com/thoughtbot/trout),
[shoulda-context](https://github.com/thoughtbot/shoulda-context), and
[jester](https://github.com/thoughtbot/jester). Do you want to take over any of
them? [Let us know](mailto:support@thoughtbot.com)!

## kumade

The [kumade](https://github.com/thoughtbot/kumade) Heroku deployer now has a
rake task hook for running code before the deployment
([8bd2824](http://github.com/thoughtbot/kumade/commit/8bd28248dbff28d83be596d42000e1500f2e52f5
"Add kumade:pre_deploy rake hook")). This was done by Joshua Clayton
([joshuaclayton](http://github.com/joshuaclayton)) in the new version: 0.8.2
([52a9348](http://github.com/thoughtbot/kumade/commit/52a93485b91c75879e31f7a94c808a125e1ab9b7
"Bump to 0.8.2")).

## paul_revere

The [paul_revere](https://github.com/thoughtbot/paul_revere) notification gem
has this sweet button to hide a notification. Ben Orenstein
([r00k](http://github.com/)) changed the duration of this hiding from one day to
one year
([5a773d4](http://github.com/thoughtbot/paul_revere/commit/5a773d4028d1c33eb316c2b7d34180b88c2d5cd4
"Change cookie expiration to 1 year (instead of 1 day).")).

## bourbon

Phil LaPier ([plapier](http://github.com/plapier)) has released version 1.3.1 of
[bourbon](https://github.com/thoughtbot/bourbon), the much-loved collection of
sass mixins
([e90113c](http://github.com/thoughtbot/bourbon/commit/e90113c959e2b45250b82b1b0294d26ccb7844d7
"version bump to 1.3.1")). In this version we have a new syntax for animation
shorthands, which means the old shorthands are deprecated
([e6dcbf5](http://github.com/thoughtbot/bourbon/commit/e6dcbf576f5962c71b6914933da75ee362ce4d56
"Add support for the deprecated animation-basic mixin"),
[a6d3a32](http://github.com/thoughtbot/bourbon/commit/a6d3a32324b73d6ad379742db035b45b1033dd81
"Removed deprecated animation-shorthand mixin."),
[89cc340](http://github.com/thoughtbot/bourbon/commit/89cc34063b7d712f44240c864aa30285eee180bf
"Merge branch ")). Get it while it's hot!

## pacecar

We have a gem that generates scopes for ActiveRecord objects, named
[pacecar](https://github.com/thoughtbot/pacecar), which you would love if you
also love methods that magically appear. Matt Jankowski
([mjankowski](http://github.com/mjankowski)) released version 1.5.3
([06b5e8e](http://github.com/thoughtbot/pacecar/commit/06b5e8ee4276ee37e61d339b611a8753d01fa886
"bump version")) with support for Rails 3.1.3 and 3.0.11
([dcc30d4](http://github.com/thoughtbot/pacecar/commit/dcc30d494b14bc083b9f86b521fd8a80d44de711
"bump to rails 3.1.3 and 3.0.11")) and which treats decimals as numeric column
types, giving you all the methods that you need for those, too
([ff7bc67](http://github.com/thoughtbot/pacecar/commit/ff7bc67fe62b567c7207be5dae66f6d9a914bfa1
"include decimal in numeric column types")).

## paperclip

The oft-used [paperclip](https://github.com/thoughtbot/paperclip) file uploader
gem hit version 2.5.0
([071c938](http://github.com/thoughtbot/paperclip/commit/071c93871465db9daad1718945b9ef1b4bf6291d
"Bump to 2.5.0")) with a
[NEWS](https://github.com/thoughtbot/paperclip/blob/071c93871465db9daad1718945b9ef1b4bf6291d/NEWS)
file describing the changes,

Jim Ryan ([jimryan](http://github.com/jimryan)) changed paperclip to process any
`:original` style before all others, which can be useful in case order matters
([f56e863](http://github.com/thoughtbot/paperclip/commit/f56e8635a613e8f3abb4c18ea5f0f0aea3c079d6
"Moved conditional from #post_process_styles to #process_style? method") and
[d3db7a1](http://github.com/thoughtbot/paperclip/commit/d3db7a1ce8f956fb677cc85b25e560bb2148436c
"Process :original style before all other styles")).

Nathan Hyde gave us a performance gain by only generating the file's fingerprint
if it can be persisted
([9fb9255](http://github.com/thoughtbot/paperclip/commit/9fb92553685ddbd4317e0423ddb9216deeeb1118
"Don") and
[4e07681](http://github.com/thoughtbot/paperclip/commit/4e076813a48cd1466fe0159ab411c11f5620bd4c
"Don")).

Alexander Greim ([iltempo](http://github.com/iltempo)) landed a feature on us:
S3 headers can be set at runtime by passing a block as the value of the headers
instead of a static hash
([a83de65](http://github.com/thoughtbot/paperclip/commit/a83de65ca790f311a7ed70638f497ae258f36952
"added documentation for s3 headers as proc") and
[7a8d1e6](http://github.com/thoughtbot/paperclip/commit/7a8d1e639c4ec04736557e129dc46ebd66dbbdfc
"S3 headers can be set as a proc now")).

Steve Madsen ([sjmadsen](http://github.com/sjmadsen)) found an edge case where
if you set an attachment, save it, set a new atachment, save it, then refresh
the missing styles using the rake task, it will crash. And he fixed it
([dc53432](http://github.com/thoughtbot/paperclip/commit/dc53432b3166a1cc711a526e1057931881babf7d
"Don")).

And Jon Yurek ([jyurek](http://github.com/jyurek)) finally fixed
`Paperclip::Attachment` such that it no longer overrides the Ruby `hash` method
with an unrelated one
([3fd4c96](http://github.com/thoughtbot/paperclip/commit/3fd4c96b28962a95447472eb4046d9f47560c4f8
"Fix the collision with Object#hash. Closes #678. Closes #450.")).

## factory_bot[^1]

As usual, [factory_bot](https://github.com/thoughtbot/factory_bot) got way
more commits than I want to read over in one sitting. For example: Simone
Carletti ([weppos](http://github.com/weppos)) added a ruby version dependency to
the Gemspec ([= 1.8.7. Also, there's no trace of Ruby 1.8.6 support in the
.travis.yml
file.">e6e4d8b](http://github.com/thoughtbot/factory_bot/commit/e6e4d8bacb812002aaef47355cec7473d5b75142
"Add `required_ruby_version` to the Gemspec. See
http://docs.rubygems.org/read/chapter/20#required_ruby_version Some features,
such as commit 4b6ada72cfe551becf13e9e707d1591833379075, requires Ruby ")). He
also fixed the link to our blog
([11a79a0](http://github.com/thoughtbot/factory_bot/commit/11a79a0a40ae791fe4e2d6a558b9657c0b0695b2
"Update Giant Robots blog URL") and
[https">30e13dd](http://github.com/thoughtbot/factory_bot/commit/30e13dd4ba57e48897ba0b9d19068a6e02939be8
"http =")).

Things like that.

So on the feature front, Evan Larkin ([elarkin](http://github.com/elarkin)) made
it such that factories still work if you define a class that overrides the
`to_s` class method
([8b3ee85](http://github.com/thoughtbot/factory_bot/commit/8b3ee85f81f346902fe7a508824c27e83758f3f3
"Supplying a Class to a factory that overrides to_s no longer results in getting
the wrong Class constructed")). Dmytrii Nagirniak
([dnagir](http://github.com/dnagir)) added support for neo4j
([5246fda](http://github.com/thoughtbot/factory_bot/commit/5246fdad261146bb8fa613ce021c12867be58968
"added spec to support ORMs with ") and
[591ec7a](http://github.com/thoughtbot/factory_bot/commit/591ec7afde160ab95c514eeca659af4f20208dc4
"Be more agnostic to ORMs when using columns. This will allow using FG with
neo4j still preserving semantics for other ORMs.")). Joshua Clayton
([joshuaclayton](http://github.com/joshuaclayton)) made it such that you can
call methods that are on the object from within a factory definition
([d918c1d](http://github.com/thoughtbot/factory_bot/commit/d918c1ddae0c2e0d181768934a82917303d10ca6
"Allow methods to be called from the instance in factory bot attributes This
fixes a regression introduced with the introduction of the anonymous class.
Closes #264")).

More wishy-washily, Josh made a bunch of refactorings, the most important of
which [speeds up the whole
product](https://thoughtbot.com/blog/post/15781666382/factory-bot-2-4-goes-meta)
([f2e4138](http://github.com/thoughtbot/factory_bot/commit/f2e41389ea3f8fd455d7a14a0241c6a1ce8d801a
"Factory evaluators use inheritance")). You can read the rest of the
refactorings as code with good commit messages:
[2e2d490](http://github.com/thoughtbot/factory_bot/commit/2e2d4903e28f2b00dc5919701e87eeaede84cdac
"Travis runs the 3.2 Gemfile"),
[40242e9](http://github.com/thoughtbot/factory_bot/commit/40242e903ba311cb7480c305bd5fabf25d4c06de
"Don"),
[32ff41f](http://github.com/thoughtbot/factory_bot/commit/32ff41ffbe4cf57eb09b008a63e13ccdd7c754bf
"Test against ActiveRecord 3.2.0.rc2 and fix bad test"),
[ac1df1d](http://github.com/thoughtbot/factory_bot/commit/ac1df1da3b16367732c54d01b01cd11a1359092c
"Don"),
[a022dda](http://github.com/thoughtbot/factory_bot/commit/a022dda8f81daf2dc1a32117879002980fa18503
"Revert &quot;Don"),
[1c7eab1](http://github.com/thoughtbot/factory_bot/commit/1c7eab13d635806040bcd65cb626552cc54871f7
"Add NullObject"),
[d9e0372](http://github.com/thoughtbot/factory_bot/commit/d9e03723459f091c8756cf88469ba6ff5398b5a9
"Mimic BasicObject without using BasicObject"), and
[b734b58](http://github.com/thoughtbot/factory_bot/commit/b734b589f83c4d52278f9db206dfc22ddbbff3ec
"Update travis.yml to run against latest versions of Ruby instead of specifying
patchlevel").

The README was improved with the status of all the dependent gems
([768dfaa](http://github.com/thoughtbot/factory_bot/commit/768dfaa730de490b0d057bed3d4769a239891210
"Add dependency status to README")), by Steve Richert
([laserlemon](http://github.com/laserlemon)). Daniel Schierbeck
([dasch](http://github.com/dasch)) fixed the formatting of sample code
([1e82889](http://github.com/thoughtbot/factory_bot/commit/1e828893f12f79f9f2b2a67245416c4bcad80f4b
"Make the examples use Ruby syntax highlighting on GitHub.")).

In the end, Josh released version 2.4.0
([69957ea](http://github.com/thoughtbot/factory_bot/commit/69957ea356b08d02bf1dd47f1fe7954428b6c96e
"Bump version to 2.4.0")).

## capybara-webkit

Matthew Mongeau ([halogenandtoast](http://github.com/halogenandtoast)) had fun
taking in pull requests on
[capybara-webkit](https://github.com/thoughtbot/capybara-webkit). Joe Fiorini
([joefiorini](http://github.com/joefiorini)) added the `requested_url` method
that produces the URL after a `pushState`
([7f907a0](http://github.com/thoughtbot/capybara-webkit/commit/7f907a00990b62f89f784341f3b7194596c1bfc1
"Add command to retrieve URL modified by Javascript If I use pushState to change
the URL Browser#current_url still returns the URL as it was after the original
request. This commit adds a command for RequestedUrl, which is the QtWebkit
method for retrieving a URL modified by Javascript or a redirect.")). Niklas
Baumstark ([niklasb](http://github.com/niklasb)) added `submit` and `path`
methods
([352823d](http://github.com/thoughtbot/capybara-webkit/commit/352823dc06f815d042806c3bf61f38e6fd71029b
"added specs for Node#path and adapted Javascript code to pass"),
[d07cf3d](http://github.com/thoughtbot/capybara-webkit/commit/d07cf3db4d73470da881fde9e80b16395f297570
"added specs for Node#submit and fixed parameter problem"),
[21f4b84](http://github.com/thoughtbot/capybara-webkit/commit/21f4b84691d00019e158c5256dda69f4b89ff338
"added specs for Node#path and adapted Javascript code to pass"),
[83905bb](http://github.com/thoughtbot/capybara-webkit/commit/83905bb48cbb376fceb07c1ae1f60f15a5b35ffb
"add "),
[4ceb874](http://github.com/thoughtbot/capybara-webkit/commit/4ceb8740faa453740a958d5c38ac56361b55bb5b
"implement ")).

John Hume ([duelinmarkers](http://github.com/duelinmarkers)) added support for
JRuby
([0979db4](http://github.com/thoughtbot/capybara-webkit/commit/0979db4675a50f0ca7ee232916a4afde49be02e4
"Choose platform more reliably. (Works with Jruby.)")). Pete Gieser
([pgieser](http://github.com/pgieser)) fixed a double-escaping bug in URLs
([fccb444](http://github.com/thoughtbot/capybara-webkit/commit/fccb444816269b477d7529a94f79d9e1bcad1fac
"visit no longer tries to fix invalid URLs")).

Matthew Mongeau ([halogenandtoast](http://github.com/halogenandtoast)) fixed the
link to the Capybara README
([e2c103c](http://github.com/thoughtbot/capybara-webkit/commit/e2c103cda663a734c9a36a6100de0d5ebfd21558
"Update documentation to point to actual capybara readme.")) and linked to the
mailing list
([d8c640d](http://github.com/thoughtbot/capybara-webkit/commit/d8c640d18674840827e22fce114a1a3bf053c452
"Added note about mailing list for compilation errors.")), and Jo Liss
([joliss](http://github.com/joliss)) recommended `bundle exec` in more places
([7fe06e9](http://github.com/thoughtbot/capybara-webkit/commit/7fe06e966dfa8d9d17cae03d2c4c1639a7c3c469
"Recommend using ")).

## clearance

Our authentication system aptly named
[clearance](https://github.com/thoughtbot/clearance) got some love from Chad
Pytel ([cpytel](http://github.com/cpytel)) and Joe Ferris
([jferris](http://github.com/jferris)), resulting in the release of clearance
0.14.0
([5471159](http://github.com/thoughtbot/clearance/commit/547115969e18e2f3240c2def91d598da957eb3fa
"bump to 0.13.1"),
[214d1dd](http://github.com/thoughtbot/clearance/commit/214d1ddb6d806c47102117dcaee07b1f61a0ece7
"Bump to 0.14.0"), and
[0dc43a6](http://github.com/thoughtbot/clearance/commit/0dc43a6e2ec923256e8440021d7dbd4d37836942
"Update the changelog")). The big deal is that the `deny_access` RSpec match and
the flash messages were totally borked. They fixed it
([2085f03](http://github.com/thoughtbot/clearance/commit/2085f03cf41a242cbbe51ddf0fbeadf32cb6bb86
"Mutate session when injecting clearance to fix flash messages"),
[23df300](http://github.com/thoughtbot/clearance/commit/23df300891c9012ea94ee68e58d74f3e21d5a2e2
"Fixed deny_access matcher on Rails 3.1"), and
[160366e](http://github.com/thoughtbot/clearance/commit/160366ea39f60286bf1805d8c759ddedd0aa10cb
"Updated appraisal gemfiles")).

## fake_braintree

Version 0.1.1 of [fake_braintree](https://github.com/thoughtbot/fake_braintree)
was released, in which Gabe Berke-Williams ([gabebw](http://github.com/gabebw))
fixed a bug in the failure message for the `have_accessor_for` matcher
([9d97aa6](http://github.com/thoughtbot/fake_braintree/commit/9d97aa6b77c5f2f1b1f1f8a54613cc25ad52d25d
"Better failure message.")) and also refactored everything
([0a45900](http://github.com/thoughtbot/fake_braintree/commit/0a45900bef61c8981aeafdf6cb08856844caf683
"Reword spec."),
[59a7b60](http://github.com/thoughtbot/fake_braintree/commit/59a7b600023ee71614d025542922f92247ee11b6
"Move into a method."),
[3daf2aa](http://github.com/thoughtbot/fake_braintree/commit/3daf2aa2a965501189f2379e2afcbf4c93a085f3
"Better method names."),
[0f955c6](http://github.com/thoughtbot/fake_braintree/commit/0f955c6e79ecb6350220326a5fa389af216cdca0
"We can just merge the hashes."),
[3e8745f](http://github.com/thoughtbot/fake_braintree/commit/3e8745f3ac0d5422223c5a7a1b861294d02b6c4d
"Better variable name."),
[bb1f339](http://github.com/thoughtbot/fake_braintree/commit/bb1f339fca33d75e7ca54e0721c472e1a74ccd04
"Let"),
[6d7d90c](http://github.com/thoughtbot/fake_braintree/commit/6d7d90caebbc35da59c6e6362108112d2644213d
"Well that didn"),
[ac0d550](http://github.com/thoughtbot/fake_braintree/commit/ac0d550a04d00279a7ba752d9f255318c4b2ef69
"Use double quotes."),
[d2f470e](http://github.com/thoughtbot/fake_braintree/commit/d2f470e82f3499b5260e0e00bed62f763b1773d5
"Less direct access of ivar."),
[3c66129](http://github.com/thoughtbot/fake_braintree/commit/3c66129ba5f0f182fa25b0d2e181ce7b5c36e1ea
"Some dup"),
[8cf7d9c](http://github.com/thoughtbot/fake_braintree/commit/8cf7d9cf9d635817233644d4dd22643cf210029d
"Abstract. No need to dup hash."),
[157b2a7](http://github.com/thoughtbot/fake_braintree/commit/157b2a75e200e49f8f636793eab6886637c32a31
"Make the Subscription class behave like the others."),
[8f21376](http://github.com/thoughtbot/fake_braintree/commit/8f2137686fb556875fe5c8e930dcf242a8e5bda8
"Move some methods around."),
[29429ef](http://github.com/thoughtbot/fake_braintree/commit/29429ef27f2c05bf3633605f04486638ab462165
"Better naming."),
[e4cef67](http://github.com/thoughtbot/fake_braintree/commit/e4cef67622f97cb92199ab43a0ce87a845cdc9b3
"Relying on the ivar being set is just weird."),
[9928436](http://github.com/thoughtbot/fake_braintree/commit/99284367aff80498c19a5bdb06996ebbbf0b4fbf
"Fix lying method name."),
[94cca24](http://github.com/thoughtbot/fake_braintree/commit/94cca243601badd8846509efe300614727293787
"Move higher-level method up in the file."),
[7bd4e20](http://github.com/thoughtbot/fake_braintree/commit/7bd4e2067f2eb9a0d77cc6971e51544624b1e2cf
"Move customer CC creation logic into method. Generate CC token in a different
way."),
[2dde9ed](http://github.com/thoughtbot/fake_braintree/commit/2dde9ed72e39cfe6bb31fe40f730b285003642d4
"Refactor to fewer "),
[e775167](http://github.com/thoughtbot/fake_braintree/commit/e775167cda8ab3d5e52fa23624ff5c31e2e161e0
"Higher-level code goes first. Better variable names."),
[a72e31b](http://github.com/thoughtbot/fake_braintree/commit/a72e31b131f3bc21d7caf04b739b3a9c167f30b0
"Push more nil-checks down."),
[57f3623](http://github.com/thoughtbot/fake_braintree/commit/57f36231fa5224b0b50ebf32d19b70a9d93a9b9e
"Big refactor. Push a lot of the nil-checking logic down."),
[d580024](http://github.com/thoughtbot/fake_braintree/commit/d58002429762f03287a84036cfa508199ba1fdf5
"Well that didn"),
[ad82f0e](http://github.com/thoughtbot/fake_braintree/commit/ad82f0e7974598e0ac316d9b7ecab625fe4cf7c2
"Make the flow clearer."),
[3385e12](http://github.com/thoughtbot/fake_braintree/commit/3385e125e276b07a529b8c1efa66e46cfdf04ece
"Abstraction"),
[cacb537](http://github.com/thoughtbot/fake_braintree/commit/cacb537a45ca1003f3b54ab7f0c995c2517911c8
"Abstract some more."),
[ae86ebe](http://github.com/thoughtbot/fake_braintree/commit/ae86ebec055e2d73b56c58ba2b8d77e24b61a74c
"Make the abstraction clearer."),
[c6cead6](http://github.com/thoughtbot/fake_braintree/commit/c6cead670dd72b60e53b7574305dd4140aa2b98a
"Move logic to a method."),
[a352f33](http://github.com/thoughtbot/fake_braintree/commit/a352f33169dfc849b5ca05bf53d5e8f66fd5d97d
"Cleanup."),
[f7a6cf5](http://github.com/thoughtbot/fake_braintree/commit/f7a6cf5f940fc667dc4780f12245dde280244b11
"Bump to v0.1.1"),
[9f1fb3b](http://github.com/thoughtbot/fake_braintree/commit/9f1fb3bb8c09761d07972e21c5874a4a6ea0a67a
"About to release 0.1.1"),
[124706d](http://github.com/thoughtbot/fake_braintree/commit/124706d75a4c00f8f5ae7d5c863784152b520aef
"Better variable name. More abstraction."),
[ef8b13a](http://github.com/thoughtbot/fake_braintree/commit/ef8b13a6708ea930a7f73945b302802da756cfac
"Fix example description."), and
[b20e318](http://github.com/thoughtbot/fake_braintree/commit/b20e3182530157621729d06fe58e83cfe3840df6
"De-dupe logic.")).

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