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

## kumade

The big changes to [kumade](https://github.com/thoughtbot/kumade) this week: the rake task automatically works, and is properly tested too; the `Less::More` packager is gone; and the cucumber tests are more extensive and reusable. This is all in the 0.8.0 release of kumade.

All commits this week were from Gabe Berke-Williams ([gabebw](http://github.com/gabebw)). He worked on the no-op asset packager, which is the useful for when you have no assets. It is never run ([ccfa677](http://github.com/thoughtbot/kumade/commit/ccfa677278337e7db0d5adbc59d8e47a9c585a9f "NoopPackager should never run.") and [e2e546e](http://github.com/thoughtbot/kumade/commit/e2e546edbf6cdd048f45e0bf7c04c9feece3a1c9 "NoopPackager runs in normal mode. Get to green.")) but is tested ([621698e](http://github.com/thoughtbot/kumade/commit/621698ec69ca9088bfeb16eb905c9e5681188e35 "Add feature for NoopPackager")). This came from tests that he refactored ([c45df04](http://github.com/thoughtbot/kumade/commit/c45df04d4cb696e3741fc5c183bde9e9c962c711 "Remove some nested steps. Remove comment."), [6600abb](http://github.com/thoughtbot/kumade/commit/6600abb3e3aa6b44e29a42a12aef58cff3c40c69 "Always disable bundler."), [9aa6230](http://github.com/thoughtbot/kumade/commit/9aa623081620226d0e5e9d2ed6bffbd0f5ea768c "No need for @creates-remote tag."), [810a832](http://github.com/thoughtbot/kumade/commit/810a83291487acf6728c37b1a8c163adf5a42ea1 "Test Jammit packager against a real Rails app. It now detects untracked asset files and commits them."), [5ef704b](http://github.com/thoughtbot/kumade/commit/5ef704b22af9feaad89464c2cefeac1c2081659a "Remove unused Cucumber steps."), [4a72bc0](http://github.com/thoughtbot/kumade/commit/4a72bc08c0535d922a7e2e989bfd47a752846bee "Use straight ruby."), [a3a080f](http://github.com/thoughtbot/kumade/commit/a3a080f8349b1417272db84cb0ef6ba34f1267ca "We ignore app name anyway, so remove it."), [c05b398](http://github.com/thoughtbot/kumade/commit/c05b398bcf6c8f11d6ae006176a81ec443fdd988 "Higher-level steps."), [c34d796](http://github.com/thoughtbot/kumade/commit/c34d796f47fcbba3813b1acdb7e9867024c17e77 "Unescaping isn"), [8e34e56](http://github.com/thoughtbot/kumade/commit/8e34e56181a6c7fb42fc46bfd24c352e3673da3b "Move bundler-running into a function so we can reuse it."), [4bffaa3](http://github.com/thoughtbot/kumade/commit/4bffaa363180007617418fc01f0d6507609bd09a "Apparently SSDs are exactly 4 times faster than spinning HDs."), [cf370c1](http://github.com/thoughtbot/kumade/commit/cf370c116f16994c991c3b1cfe26a7d6864a7f15 "Split Jammit into its own feature."), [13469e2](http://github.com/thoughtbot/kumade/commit/13469e2e1c433d3ec5f0bbceb52a899dd2994be9 "Move git into its own feature."), [ef026fc](http://github.com/thoughtbot/kumade/commit/ef026fc6f4019e8224fbedda2fecd2ba29648072 "Clean up main feature."), [40eb3a8](http://github.com/thoughtbot/kumade/commit/40eb3a82727c537a26390ac068201c153f36794d "Test that Git is always clean when pretending."), [caeb62a](http://github.com/thoughtbot/kumade/commit/caeb62ad0a8ceb6631642f56631a67472693a55d "Move pre-compilation task into its own feature. This also removes a lot of nested Cucumber steps."), [7ca5108](http://github.com/thoughtbot/kumade/commit/7ca5108c6bf0828798ee2c49cfb7090e6fe2724e "Many fewer nested Cucumber steps."), [7e4eab3](http://github.com/thoughtbot/kumade/commit/7e4eab30808f01a6af4f0dea453299f225869eb2 "Remove all git remotes before and after scenarios.")); a main theme of this refactoring is moving Cucumber step definitions into re-usable Ruby methods. He also noted that Rails is a dependency for the gem, but rake is not ([1808c1e](http://github.com/thoughtbot/kumade/commit/1808c1eb1e831db3e18f084eb85130f0076fc3d7 "Rails is a dependency.")). Also included in this paragraph is the cleanup of the README he did ([3eb743c](http://github.com/thoughtbot/kumade/commit/3eb743c28618b1be5480c168497c0bba62dddb3b "Department of redundancy department.")).

In terms of awesome, kumade has grown so large that Gabe needed to generate a ctags file, and git-ignore it ([41c261b](http://github.com/thoughtbot/kumade/commit/41c261b4c2bd71601eff0d845f68a16587f1f7e3 "Ignore ctags file.")). The More packager, which uses the `Less::More` gem, was undertested and unused and, thus, removed ([594a6d0](http://github.com/thoughtbot/kumade/commit/594a6d0a6d5eab6d5865d060ed8560ca745e5b52 "Remove MorePackager.")). The rake task, which has been in odd states in the past, now works, no setup needed ([8d93837](http://github.com/thoughtbot/kumade/commit/8d938375c549439fce220de722fc17d66bf6a436 "Always load the railtie.") and [f2ee9f4](http://github.com/thoughtbot/kumade/commit/f2ee9f4525723b863d6f2e3f8d49392bad1ac2f3 "Fix Railtie so that Kumade rake tasks work.")). A bug where untracked asset files were not caught has been fixed ([867594d](http://github.com/thoughtbot/kumade/commit/867594d5c6bf5dc9e62a40c2f4957e826d817bed "Package untracked asset files.")). And all of this was _released as version 0.8.0 of kumade_ ([8de6c4c](http://github.com/thoughtbot/kumade/commit/8de6c4c6d5ee47528a0ce63c6c403f0239f194f4 "Bump to 0.8.0"))!

## suspenders

Hot new things in our app-generating gem, [suspenders](https://github.com/thoughtbot/suspenders): pass Rails generator arguments through from the command-line to the low-level generator, ActiveRecord attributes default to protected, Clearance is easier to test, the Procfile is copied for easier Heroku usage, and the gem itself is much easier to test.

Like kumade, all commits on suspenders this week were from one person: Harold Giménez ([hgimenez](http://github.com/hgmnz)). The Procfile is a Heroku-specific file that lets us state that we want to use thin instead of the default Web server. This is copied to the generated app now ([4a5c154](http://github.com/thoughtbot/suspenders/commit/4a5c154fc2ce78f1779dbbe461934478126b34a8 "Also copy the Procfile")). Rails and cucumber were both upgraded to 3.1 and 1.1.0, respectively ([44190e8](http://github.com/thoughtbot/suspenders/commit/44190e84127c0460ffdbe227848f9ad49af539f4 "Depend on latest rails"), [d99d7f3](http://github.com/thoughtbot/suspenders/commit/d99d7f3107549f45e28516032ecf43c99c6821a6 "Bump cucumber dev dependency"), and [07602fa](http://github.com/thoughtbot/suspenders/commit/07602fa6ff844c0578914bfd098e252413f1d051 "This hack no longer necessary")). The database does not auto-migrate on app generation, giving you time to remove or change Clearance as needed ([70887f8](http://github.com/thoughtbot/suspenders/commit/70887f84586225f136d5cba177e5a423ba6ef1d9 "Don") and [b4a74c9](http://github.com/thoughtbot/suspenders/commit/b4a74c9750acb396d38578899a8f9f3ccbaba50c "No need for the migration action on the app builder")). The `clearance/testing` module is automatically required by the spec suite now ([6436933](http://github.com/thoughtbot/suspenders/commit/64369338d2fb55240e393c1ae7ee72bca712f90c "Inject clearance/testing in spec/support/clearance.rb")). The default rake task runs specs and cucumber features ([3131d45](http://github.com/thoughtbot/suspenders/commit/3131d45612a6bdc9617eebe6c730ea9bc94f1c6e "Add a default rake task that runs spec and cukes")). The command-line interface was changed; instead of specifying a subcommand, you instead just say `suspenders awesome-blog` to create an awesome-blog project ([c27af6f](http://github.com/thoughtbot/suspenders/commit/c27af6f685bccccb6f8da238514c5ec7c032f162 "Remove unused code")). Finally and most controversially, ActiveRecord objects require attribute whitelisting now with `attr_accessible` ([fcbe87c](http://github.com/thoughtbot/suspenders/commit/fcbe87c857b79583c3521ba8ac5ed7860ae262b8 "Set up attribute whitelisting if you") and [c3dd8ab](http://github.com/thoughtbot/suspenders/commit/c3dd8abe4d5c49a617c0c3db7e219fc4484bc88c "Set attr_accessible on the right attributes on User")).

Internally the lives of developers was made easier (so get your pull requests ready!). The trout gem was removed, along with all the functionality it brought and required ([244b944](http://github.com/thoughtbot/suspenders/commit/244b944eecd923de56de64705fffe26048cb681d "Rename template directory to templates"), [2b2c6ec](http://github.com/thoughtbot/suspenders/commit/2b2c6ec78dc4a7a85966db3adc9506db6387acdd "Remove trout directory"), [470e642](http://github.com/thoughtbot/suspenders/commit/470e642e943f51c18933ce73edb49161f73b34e9 "Remove trout dependency"), and [1969445](http://github.com/thoughtbot/suspenders/commit/1969445a3ad02a369625aebdf66907c883bb400d "The subdirectory is no longer needed")). Aruba was added ([518f4d8](http://github.com/thoughtbot/suspenders/commit/518f4d8dd34fe79d1b9f6a10ae9d33af424ae9e8 "Use aruba and clean up test suite"), [bcfb05e](http://github.com/thoughtbot/suspenders/commit/bcfb05e58ef4fdc7e62e9dcb361a852461117652 "Adding aruba"), and [f3dca30](http://github.com/thoughtbot/suspenders/commit/f3dca30b6f8445509673b3df68c62f2c2a27d09e "Ignore tmp/aruba")), which made is eaier to put Suspenders on bundler ([064b1e6](http://github.com/thoughtbot/suspenders/commit/064b1e6107124dbbd39c24a8768a248a297197da "Extract Gemfile additions to an external file"), [6f677b9](http://github.com/thoughtbot/suspenders/commit/6f677b9fd9ec327dfba8f05648e7832adb01dad7 "Update files in gemspec"), and [e097c00](http://github.com/thoughtbot/suspenders/commit/e097c00aee4aa3c1d1da4f2bea984d6add3e68a2 "Add a Gemfile to resolve dependencies in development")), which also removed the `REPO` environment variable's use ([d7a74c2](http://github.com/thoughtbot/suspenders/commit/d7a74c2a98cc303b277d9917704839a2757de4e4 "Remove all the REPO stuff we don")), and made the rake tasks easier ([d900182](http://github.com/thoughtbot/suspenders/commit/d900182e32dc5c32c7d4b86edccc275e010acf44 "Remove unused rake tasks")). The Rails custom template was re-written to be an AppGenerator ([517f0c3](http://github.com/thoughtbot/suspenders/commit/517f0c33597789f790fc5b55790f0650aaa6d6fe "Refactored template to a Rails AppGenerator")). Also, the word "miscellaneous" was spelled properly ([ce1b191](http://github.com/thoughtbot/suspenders/commit/ce1b1911fa0b372f66f55abbe7952124e675d087 "Typo")).

This all brought documentation changes, of course! The README no longer mentions the subcommands ([1eec3cc](http://github.com/thoughtbot/suspenders/commit/1eec3cc777c80efeffff0261e8dd30696172c699 "Update REAMDE")) or trout ([385dd5b](http://github.com/thoughtbot/suspenders/commit/385dd5b80e5fa73cf118f64105df2405a2351e24 "Don")), nor does it mention the `REPO` environment variable ([01e76e5](http://github.com/thoughtbot/suspenders/commit/01e76e5c798934df81dd12c6c530902638a485c5 "Revert &quot;Reminder about REPO variable&quot;) This reverts commit 40250296ef87c83392f78d623c2d48758b024098, because we no longer need the REPO variable.")). It does, however, discuss the OS-level dependencies ([713e714](http://github.com/thoughtbot/suspenders/commit/713e714ebdb7ad6026c8ed388e5841a400c3e3b6 "Mention dependencies (from 9900d159)")).

With all that done, Harold _released version 0.3.1 of Suspenders_ ([68f4a1c](http://github.com/thoughtbot/suspenders/commit/68f4a1c63741be7259f2cee9d66f2f896ecefb72 "Bump to 0.3") and [a0225bd](http://github.com/thoughtbot/suspenders/commit/a0225bdd5a246464e5b959bc3b2902cac8b06286 "Release 0.3.1")).

## high_voltage

All documentation updates this week for [high_voltage](https://github.com/thoughtbot/high_voltage), our static page gem. Matt Jankowski ([mjankowski](http://github.com/mjankowski)) mentioned that static pages go under `app/views/pages`, at least by default ([bfb6b4a](http://github.com/thoughtbot/high_voltage/commit/bfb6b4ae28c2b63d0b0cebdbc9eca2de97ebb705 "Add note about app/views/pages directory and partial rendering.")). Jaime Iniesta ([jaimeiniesta](http://github.com/jaimeiniesta)) mentioned how custom routes and custom controllers need to work ([1450b15](http://github.com/thoughtbot/high_voltage/commit/1450b153a3c2498b183c064f8654fa473ca20f24 "Update README to clarify how to set up custom routes with an overriden controller")).

## paperclip

We saw one bug fix, some refactoring, and documentation updates on the [paperclip](https://github.com/thoughtbot/paperclip) file uploader gem. Prem Sichanugrist ([sikachu](http://github.com/sikachu)) fixed the `validates_attachment_presence` validator to handle an `:if` and `:unless` as a symbol instead of a Proc ([2583a27](http://github.com/thoughtbot/paperclip/commit/2583a27df497e72ec7a200b6aa707948e88fd166 "Fix a bug when passing a method name to `:if` and `:unless` option in `validates_attachment_presence` Fixes #631")).

Prem also moved the storage tests into the `test/storage` directory ([41f685f](http://github.com/thoughtbot/paperclip/commit/41f685f6e01396936bb8cd98e7cca517e2c7d96b "Move Fog")), which caused Mike Burns ([mike-burns](http://github.com/mike-burns)) to fix the tests ([af689b4](http://github.com/thoughtbot/paperclip/commit/af689b44c827aa9d412fd6791f14d19a16ef53d4 "Fix the fixture issue.")). Prem changed some words in the features ([9fb5b74](http://github.com/thoughtbot/paperclip/commit/9fb5b742105096fe0ab17addb110ae9d4b3e007f "Update wording on rake task feature file")) and re-aligned some code ([42d4199](http://github.com/thoughtbot/paperclip/commit/42d41995163f97a81bfc66ac448b0f141887b434 "Fix alignment issue")).

Gabe Berke-Williams ([gabebw](http://github.com/gabebw)), who loves changing documentation, documented the geometry formats finally ([093a14a](http://github.com/thoughtbot/paperclip/commit/093a14ad1deaf87cf370d889b62251401c2decc6 "Add info on how geometry formats work.")) and fixed the Markdown formatting ([227d6a4](http://github.com/thoughtbot/paperclip/commit/227d6a4283d1844fc5cf8e0ebb879bdf1a23c724 "Escape underscores.")).

## factory_bot[^1]

Also an internal improvement week for our [factory_bot](https://github.com/thoughtbot/factory_bot) fixture replacment. Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) fixed the formatting in the contribution guidelines ([cddfa92](http://github.com/thoughtbot/factory_bot/commit/cddfa927bcc83b5225e41f321f03dd885d986ebf "Escape the underscore.")). GunioRobot ([GunioRobot](http://github.com/GunioRobot)) cleaned up some excess whitespace for us ([f41299e](http://github.com/thoughtbot/factory_bot/commit/f41299ef61e7404437a4ddc3e5316a98cce48e67 "Merge pull request #220 from GunioRobot/clean Clean up whitespace thanks to Gun.io.")). Joshua Clayton ([joshuaclayton](http://github.com/joshuaclayton)) tested that the block passed to the factory runner is indeed called ([93026a8](http://github.com/thoughtbot/factory_bot/commit/93026a8f2f456602c76d0c0ed78b4292ddc8b7a9 "Test the block is called in Factory#run"), [73b9e41](http://github.com/thoughtbot/factory_bot/commit/73b9e4196a96ab1181060b4428bdd45214e8b20f "Revert &quot;Ensure the block called to Factory#run is actually called&quot; This reverts commit 4ede9f1b1b8f44439d61aa99eee3587727779577."), and [4ede9f1](http://github.com/thoughtbot/factory_bot/commit/4ede9f1b1b8f44439d61aa99eee3587727779577 "Ensure the block called to Factory#run is actually called")).

## dotfiles

Hot new stuff if you're a git, vim, or shell enthusiast! Our [dotfiles](https://github.com/thoughtbot/dotfiles) have new shell aliases for running a bundled rake and deploying to staging and production ([9495c56](http://github.com/thoughtbot/dotfiles/commit/9495c56e81fb6294bd46f6ddc1186f963574c6e2 "Some new aliases: &quot;bake&quot; for bundle exec rake, &quot;staging&quot; for getting into a Heroku cedar staging console, &quot;production&quot; for same thing, diff env")), a new git log format and default push state ([fdc8afc](http://github.com/thoughtbot/dotfiles/commit/fdc8afcd198ebaefe8b17388f85fab801251b7fa "adding a global .gitconfig that by default tracks branches (so you can ")), and coffeescript support for vim ([Coffeescript for vim">318b620](http://github.com/thoughtbot/dotfiles/commit/318b6202fb66214e32e625dc62ccbc6bc1c52ec2) and [1a8d7cf](http://github.com/thoughtbot/dotfiles/commit/1a8d7cf5f6ca79356460a57890cf8d3f3a0d47eb "coffeescript detection, indentation, and syntax highlighting for vim")). All of this is thanks to Dan Croak ([croaky](http://github.com/croaky)).

## fake_braintree

The Braintree test fake, [fake_braintree](https://github.com/thoughtbot/fake_braintree), can now handle varies types of credit card verification ([6bd119e](http://github.com/thoughtbot/fake_braintree/commit/6bd119ed27c2cbe69a76472c09c0e93e55673a53 "Allow for basic card verification.")) and missing subscriptions ([9b812ed](http://github.com/thoughtbot/fake_braintree/commit/9b812ed84b7677a4c5df37d0a0f19d4180439488 "Add tests for Braintree::Subscription. Correctly handle missing subscriptions.")). Note that in the missing subscriptions commit Gabe Berke-Williams ([gabebw](http://github.com/gabebw)) committed his generated ctags file.

Along with those features come code re-alignment ([43099c4](http://github.com/thoughtbot/fake_braintree/commit/43099c47ff617c4bcb87ed9246d559eea920b29e "Cleanup.")) and more helper methods ([0e6f4f5](http://github.com/thoughtbot/fake_braintree/commit/0e6f4f5f1855c8f47494374aeba2cbdbbc9a88e6 "Clean up.")) plus some README updates in the form of formatting ([313d8fd](http://github.com/thoughtbot/fake_braintree/commit/313d8fd8e58c63dc84ac160ff35ceb345a48fb08 "Formatting.")), code escaping ([1d667c6](http://github.com/thoughtbot/fake_braintree/commit/1d667c621f25e7fc8ff775dad3ffd10ee391bf87 "No need to escape.")), and a quick-start tutorial ([62feac8](http://github.com/thoughtbot/fake_braintree/commit/62feac8c5f70cc1250bd030c767b1a5dbc734e56 "Better README.")).

With those few things done Gabe _released version 0.0.4 of fake_braintree_ ([54130ae](http://github.com/thoughtbot/fake_braintree/commit/54130aec67baf7aaf0302aafb491e676d2d8408d "Bump to 0.0.4. Add Changelog.") and [e54e98d](http://github.com/thoughtbot/fake_braintree/commit/e54e98ddf32bd3cdf120e3ab64115c199de0051a "Bump to 0.0.3 for improved subscription handling.")).

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