penchant/README.md

2.6 KiB

I have a penchant for setting up all my projects so they work the same.

I like to do these things in all my projects:

  • Have all my tests run before committing. I don't like buying ice cream for the team on test failures.
  • If I'm developing gems alongside this project, I use a Gemfile.erb to get around the "one gem, one source" issue in current versions of Bundler.
  • If I'm moving to different machines or (heaven forbid!) having other developers work on the project, I want to make getting all those local gems as easy as possible.

This gem makes that easier!

What's it do?

Installs a bunch of scripts into the scripts directory of your project:

  • gemfile which switches between Gemfile.erb environments
  • install-git-hooks which will do just what it says
  • hooks/pre-commit, one of the hooks the prior script installs
  • initialize-environment, which bootstraps your local environment so you can get up and running

initialize-environment

It will also try to run rake bootstrap, so add a :bootstrap task for things that should happen when you start going (make databases, other stuff, etc, whatever). This won't run if the :bootstrap task is not there.

Gemfile.erb?!

Yeah, it's a Gemfile with ERB in it:

<% env :local do %>
  gem 'guard', :path => '../guard'
<% end %>

<% env :remote do %>
  gem 'guard', :git => 'git://github.com/johnbintz/guard.git'
<% end %>

Use script/gemfile local to get at the local ones, and script/gemfile remote to get at the remote ones. It then runs bundle install.

You can also run penchant gemfile ENV.

After-gemfile hooks?

Drop a file called .penchant in your project directory. It'll get executed every time you switch environments using Penchant. I use it to tell my Hydra clients to sync and update their Gemfiles, too:

# rake knows if you need "bundle exec" or not.

rake "hydra:sync hydra:remote:bundle"

What environment are you currently using in that Gemfile?

head -n 1 that puppy, or penchant gemfile-env.

git hook?!

It runs penchant gemfile remote then runs bundle exec rake. Make sure your default Rake task for the project runs your tests and performs any other magic necessary before each commit. Your re-environmented Gemfile and Gemfile.lock will be added to your commit if they've changed.

How?!

  • gem install penchant
  • cd to your project directory

And then one of the following:

  • penchant install for a new project (--dir=WHEREVER will install the scripts to a directory other than $PWD/scripts)
  • penchant convert for an existing project (--dir=WHEVEVER works here, too)