penchant 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -19,11 +19,6 @@ Installs a bunch of scripts into the `scripts` directory of your project:
19
19
  * `hooks/pre-commit`, one of the hooks the prior script installs
20
20
  * `initialize-environment`, which bootstraps your local environment so you can get up and running
21
21
 
22
- ## initialize-environment
23
-
24
- It will also try to run `rake bootstrap`, so add a `:bootstrap` task for things that should happen when you start going
25
- (make databases, other stuff, etc, whatever). This won't run if the `:bootstrap` task is not there.
26
-
27
22
  ## Gemfile.erb?!
28
23
 
29
24
  Yeah, it's a `Gemfile` with ERB in it:
@@ -43,6 +38,26 @@ It then runs `bundle install`.
43
38
 
44
39
  You can also run `penchant gemfile ENV`.
45
40
 
41
+ ## initialize-environment
42
+
43
+ Get new developers up to speed fast! `script/initialize-environment` does the following when run:
44
+
45
+ * Check out any remote repos found in `Gemfile.erb` to the same directory where your current project lives.
46
+ That way, you can have your `Gemfile.erb` set up as above and everything works cleanly.
47
+ * Runs `script/gemfile remote` to set your project to using remote repositories.
48
+ * Runs `rake bootstrap` for the project if it exists.
49
+
50
+ ### After-`gemfile` hooks?
51
+
52
+ Drop a file called `.penchant` in your project directory. It'll get executed every time you switch environments using
53
+ Penchant. I use it to tell my Hydra clients to sync and update their Gemfiles, too:
54
+
55
+ ``` ruby
56
+ # rake knows if you need "bundle exec" or not.
57
+
58
+ rake "hydra:sync hydra:remote:bundle"
59
+ ```
60
+
46
61
  ### What environment are you currently using in that Gemfile?
47
62
 
48
63
  `head -n 1` that puppy, or `penchant gemfile-env`.
data/bin/penchant CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'rubygems'
4
4
  require 'thor'
5
5
  require 'penchant'
6
+ require 'fileutils'
6
7
 
7
8
  class PenchantCLI < Thor
8
9
  include Thor::Actions
@@ -19,21 +20,38 @@ class PenchantCLI < Thor
19
20
  method_options :dir => 'script'
20
21
  def convert
21
22
  install
22
- copy_file 'Gemfile', 'Gemfile.erb'
23
- remove_file 'Gemfile'
23
+ FileUtils.mv 'Gemfile', 'Gemfile.erb'
24
24
  gemfile(:remote)
25
25
  end
26
26
 
27
- desc "gemfile ENV", "Switch the gemfile environment"
28
- def gemfile(env)
29
- Penchant::Gemfile.do_full_env_switch!(env)
27
+ desc "gemfile ENV", "Switch the gemfile environment, or rebuild the current environment if not given"
28
+ def gemfile(env = get_current_env)
29
+ if env
30
+ puts "[penchant] Rebunding for #{env} environment..."
31
+ Penchant::Gemfile.do_full_env_switch!(env)
32
+ end
33
+
34
+ gemfile = Penchant::Gemfile.new
35
+ if !gemfile.has_gemfile?
36
+ puts "No Gemfile or Gemfile.erb, exiting."
37
+ exit 1
38
+ end
39
+ system %{bundle}
30
40
  end
31
41
 
32
42
  desc "gemfile-env", "Get the gemfile environment"
33
43
  def gemfile_env
34
- gemfile = Penchant::Gemfile.new
35
- puts gemfile.environment
44
+ puts get_current_env
36
45
  end
46
+
47
+ no_tasks do
48
+ def get_current_env
49
+ gemfile = Penchant::Gemfile.new
50
+ gemfile.environment
51
+ end
52
+ end
53
+
54
+ default_task :gemfile
37
55
  end
38
56
 
39
57
  PenchantCLI.start
@@ -0,0 +1,28 @@
1
+ module Penchant
2
+ class DotPenchant
3
+ class << self
4
+ def run(env = nil)
5
+ dot_penchant = new
6
+ dot_penchant.run(env)
7
+ dot_penchant
8
+ end
9
+ end
10
+
11
+ def run(env = nil)
12
+ instance_eval(File.read('.penchant'))
13
+ end
14
+
15
+ def rake(*tasks)
16
+ command = [ "rake", *tasks ]
17
+ command.unshift("bundle exec") if gemfile?
18
+ Kernel.system command.join(' ')
19
+ end
20
+
21
+ private
22
+ def gemfile?
23
+ File.file?('Gemfile')
24
+ end
25
+
26
+ end
27
+ end
28
+
@@ -7,13 +7,13 @@ module Penchant
7
7
  class << self
8
8
  def do_full_env_switch!(env)
9
9
  gemfile = Penchant::Gemfile.new
10
+ gemfile.run_dot_penchant!(env)
11
+
10
12
  if !gemfile.has_gemfile_erb?
11
- puts "Not using Gemfile.erb, exiting."
12
13
  return false
13
14
  end
14
15
 
15
16
  gemfile.switch_to!(env)
16
- system %{bundle}
17
17
  end
18
18
  end
19
19
 
@@ -29,6 +29,10 @@ module Penchant
29
29
  File.file?('Gemfile')
30
30
  end
31
31
 
32
+ def has_dot_penchant?
33
+ File.file?('.penchant')
34
+ end
35
+
32
36
  def gemfile_erb_path
33
37
  file_in_path('Gemfile.erb')
34
38
  end
@@ -52,6 +56,10 @@ module Penchant
52
56
  end
53
57
  end
54
58
 
59
+ def run_dot_penchant!(env)
60
+ DotPenchant.run(env || environment) if has_dot_penchant?
61
+ end
62
+
55
63
  private
56
64
  def file_in_path(file)
57
65
  File.join(@path, file)
@@ -1,3 +1,3 @@
1
1
  module Penchant
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/penchant.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  module Penchant
2
2
  autoload :Gemfile, 'penchant/gemfile'
3
+ autoload :DotPenchant, 'penchant/dot_penchant'
3
4
  end
data/script/gemfile CHANGED
@@ -4,6 +4,7 @@ require 'rubygems'
4
4
  require 'penchant'
5
5
 
6
6
  if Penchant::Gemfile.do_full_env_switch!(ARGV[0])
7
+ system %{bundle}
7
8
  puts "Gemfile switched to #{ARGV[0]}"
8
9
  else
9
10
  exit 0
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Penchant::DotPenchant do
4
+ include FakeFS::SpecHelpers
5
+
6
+ describe '.run' do
7
+ before do
8
+ File.open('.penchant', 'wb') { |fh|
9
+ fh.puts "@did_run = env"
10
+ }
11
+ end
12
+
13
+ it 'should run the file in the environment' do
14
+ dot_file = Penchant::DotPenchant.run(:this)
15
+
16
+ dot_file.instance_variable_get(:@did_run).should == :this
17
+ end
18
+ end
19
+
20
+ let(:dot_file) { described_class.new }
21
+
22
+ describe '#rake' do
23
+ context 'without Gemfile' do
24
+ before do
25
+ Kernel.expects(:system).with('rake task1 task2')
26
+ end
27
+
28
+ it 'should run the rake task via system' do
29
+ dot_file.rake("task1", "task2")
30
+ end
31
+ end
32
+
33
+ context 'with Gemfile' do
34
+ before do
35
+ File.open('Gemfile', 'wb')
36
+ Kernel.expects(:system).with('bundle exec rake task1 task2')
37
+ end
38
+
39
+ it 'should run the rake task via system' do
40
+ dot_file.rake("task1", "task2")
41
+ end
42
+ end
43
+ end
44
+ end
45
+
@@ -103,6 +103,20 @@ ERB
103
103
  File.read('Gemfile').should_not include('not')
104
104
  File.read('Gemfile').should include('all')
105
105
  end
106
+
107
+ it { should_not have_dot_penchant }
108
+
109
+ context 'with .penchant' do
110
+ before do
111
+ File.open('.penchant', 'wb')
112
+ end
113
+
114
+ it { should have_dot_penchant }
115
+
116
+ it 'should process the file' do
117
+ subject.switch_to!(:not)
118
+ end
119
+ end
106
120
  end
107
121
  end
108
122
  end
@@ -5,7 +5,7 @@ if File.file?('Gemfile.erb')
5
5
 
6
6
  Dir.chdir '..' do
7
7
  File.readlines(File.join(pwd, 'Gemfile.erb')).find_all { |line| line[':git'] }.each do |line|
8
- repo = line[%r{:git => (['"])(.*)\1}, 2]
8
+ repo = line[%r{:git => (['"])([^'"]+)\1}, 2]
9
9
 
10
10
  puts "Installing #{repo}"
11
11
  system %{git clone #{repo}}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: penchant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-18 00:00:00.000000000Z
12
+ date: 2011-09-14 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: Things I do for my Rails projects to get up to speed in new environments
15
15
  fast
@@ -27,6 +27,7 @@ files:
27
27
  - Rakefile
28
28
  - bin/penchant
29
29
  - lib/penchant.rb
30
+ - lib/penchant/dot_penchant.rb
30
31
  - lib/penchant/gemfile.rb
31
32
  - lib/penchant/version.rb
32
33
  - penchant.gemspec
@@ -34,6 +35,7 @@ files:
34
35
  - script/hooks/pre-commit
35
36
  - script/initialize-environment
36
37
  - script/install-git-hooks
38
+ - spec/lib/penchant/dot_penchant_spec.rb
37
39
  - spec/lib/penchant/gemfile_spec.rb
38
40
  - spec/lib/penchant_spec.rb
39
41
  - spec/spec_helper.rb
@@ -61,9 +63,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
63
  version: '0'
62
64
  requirements: []
63
65
  rubyforge_project: penchant
64
- rubygems_version: 1.8.6
66
+ rubygems_version: 1.8.9
65
67
  signing_key:
66
68
  specification_version: 3
67
69
  summary: Things I do for my Rails projects to get up to speed in new environments
68
70
  fast
69
- test_files: []
71
+ test_files:
72
+ - spec/lib/penchant/dot_penchant_spec.rb
73
+ - spec/lib/penchant/gemfile_spec.rb
74
+ - spec/lib/penchant_spec.rb
75
+ - spec/spec_helper.rb