Merge branch 'master' of github.com:johnbintz/penchant

This commit is contained in:
John Bintz 2011-09-09 14:15:59 -04:00
commit f7738f3d42
7 changed files with 110 additions and 1 deletions

View File

@ -43,6 +43,17 @@ It then runs `bundle install`.
You can also run `penchant gemfile ENV`. 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:
``` ruby
# rake knows if you need "bundle exec" or not.
rake "hydra:sync hydra:remote:bundle"
```
### What environment are you currently using in that Gemfile? ### What environment are you currently using in that Gemfile?
`head -n 1` that puppy, or `penchant gemfile-env`. `head -n 1` that puppy, or `penchant gemfile-env`.

View File

@ -28,7 +28,7 @@ class PenchantCLI < Thor
def gemfile(env = get_current_env) def gemfile(env = get_current_env)
if env if env
puts "[penchant] Rebunding for #{env} environment..." puts "[penchant] Rebunding for #{env} environment..."
!Penchant::Gemfile.do_full_env_switch!(env) Penchant::Gemfile.do_full_env_switch!(env)
end end
gemfile = Penchant::Gemfile.new gemfile = Penchant::Gemfile.new

View File

@ -1,3 +1,4 @@
module Penchant module Penchant
autoload :Gemfile, 'penchant/gemfile' autoload :Gemfile, 'penchant/gemfile'
autoload :DotPenchant, 'penchant/dot_penchant'
end end

View File

@ -0,0 +1,28 @@
module Penchant
class DotPenchant
class << self
def run(env = nil)
dot_penchant = new
dot_penchant.run(env)
dot_penchant
end
end
def run(env = nil)
instance_eval(File.read('.penchant'))
end
def rake(*tasks)
command = [ "rake", *tasks ]
command.unshift("bundle exec") if gemfile?
Kernel.system command.join(' ')
end
private
def gemfile?
File.file?('Gemfile')
end
end
end

View File

@ -7,6 +7,8 @@ module Penchant
class << self class << self
def do_full_env_switch!(env) def do_full_env_switch!(env)
gemfile = Penchant::Gemfile.new gemfile = Penchant::Gemfile.new
gemfile.run_dot_penchant!(env)
if !gemfile.has_gemfile_erb? if !gemfile.has_gemfile_erb?
return false return false
end end
@ -27,6 +29,10 @@ module Penchant
File.file?('Gemfile') File.file?('Gemfile')
end end
def has_dot_penchant?
File.file?('.penchant')
end
def gemfile_erb_path def gemfile_erb_path
file_in_path('Gemfile.erb') file_in_path('Gemfile.erb')
end end
@ -50,6 +56,10 @@ module Penchant
end end
end end
def run_dot_penchant!(env)
DotPenchant.run(env || environment) if has_dot_penchant?
end
private private
def file_in_path(file) def file_in_path(file)
File.join(@path, file) File.join(@path, file)

View File

@ -0,0 +1,45 @@
require 'spec_helper'
describe Penchant::DotPenchant do
include FakeFS::SpecHelpers
describe '.run' do
before do
File.open('.penchant', 'wb') { |fh|
fh.puts "@did_run = env"
}
end
it 'should run the file in the environment' do
dot_file = Penchant::DotPenchant.run(:this)
dot_file.instance_variable_get(:@did_run).should == :this
end
end
let(:dot_file) { described_class.new }
describe '#rake' do
context 'without Gemfile' do
before do
Kernel.expects(:system).with('rake task1 task2')
end
it 'should run the rake task via system' do
dot_file.rake("task1", "task2")
end
end
context 'with Gemfile' do
before do
File.open('Gemfile', 'wb')
Kernel.expects(:system).with('bundle exec rake task1 task2')
end
it 'should run the rake task via system' do
dot_file.rake("task1", "task2")
end
end
end
end

View File

@ -103,6 +103,20 @@ ERB
File.read('Gemfile').should_not include('not') File.read('Gemfile').should_not include('not')
File.read('Gemfile').should include('all') File.read('Gemfile').should include('all')
end end
it { should_not have_dot_penchant }
context 'with .penchant' do
before do
File.open('.penchant', 'wb')
end
it { should have_dot_penchant }
it 'should process the file' do
subject.switch_to!(:not)
end
end
end end
end end
end end