penchant 0.0.3 → 0.0.5
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 +27 -0
- data/bin/penchant +10 -3
- data/lib/penchant/dot_penchant.rb +2 -3
- data/lib/penchant/gemfile.rb +17 -9
- data/lib/penchant/version.rb +1 -1
- data/script/hooks/pre-commit +1 -1
- data/spec/lib/penchant/gemfile_spec.rb +27 -0
- data/template/script/hooks/post-commit +4 -0
- data/template/script/hooks/pre-commit +2 -2
- metadata +4 -3
data/README.md
CHANGED
@@ -31,6 +31,10 @@ Yeah, it's a `Gemfile` with ERB in it:
|
|
31
31
|
<% env :remote do %>
|
32
32
|
gem 'guard', :git => 'git://github.com/johnbintz/guard.git'
|
33
33
|
<% end %>
|
34
|
+
|
35
|
+
<% no_deployment do %>
|
36
|
+
gem 'os-specific-things'
|
37
|
+
<% end %>
|
34
38
|
```
|
35
39
|
|
36
40
|
Use `script/gemfile local` to get at the local ones, and `script/gemfile remote` to get at the remote ones.
|
@@ -38,6 +42,29 @@ It then runs `bundle install`.
|
|
38
42
|
|
39
43
|
You can also run `penchant gemfile ENV`.
|
40
44
|
|
45
|
+
### Deployment mode
|
46
|
+
|
47
|
+
Use `no_deployment` blocks to indicate gems that shouldn't even appear in `Gemfiles` destined for
|
48
|
+
remote servers. *Very* helpful when you have OS-specific gems and are developing on one platform
|
49
|
+
and deploying on another:
|
50
|
+
|
51
|
+
``` erb
|
52
|
+
<% no_deployment do %>
|
53
|
+
require 'rbconfig'
|
54
|
+
case RbConfig::CONFIG['host_os']
|
55
|
+
when /darwin/
|
56
|
+
gem 'growl_notify'
|
57
|
+
gem 'growl'
|
58
|
+
gem 'rb-fsevent'
|
59
|
+
when /linux/
|
60
|
+
gem 'libnotify', :require => nil
|
61
|
+
end
|
62
|
+
<% end %>
|
63
|
+
```
|
64
|
+
|
65
|
+
Run `penchant gemfile ENV --deployment` to get this behavior. This is run by default when the
|
66
|
+
pre-commit git hook runs.
|
67
|
+
|
41
68
|
## initialize-environment
|
42
69
|
|
43
70
|
Get new developers up to speed fast! `script/initialize-environment` does the following when run:
|
data/bin/penchant
CHANGED
@@ -14,6 +14,10 @@ class PenchantCLI < Thor
|
|
14
14
|
def install
|
15
15
|
directory 'template/script', options[:dir]
|
16
16
|
Dir[File.join(options[:dir], '**/*')].each { |file| File.chmod(0755, file) }
|
17
|
+
|
18
|
+
Dir['script/hooks/*'].each do |hook|
|
19
|
+
FileUtils.ln_sf File.join(Dir.pwd, hook), ".git/hooks/#{File.split(hook).last}"
|
20
|
+
end
|
17
21
|
end
|
18
22
|
|
19
23
|
desc "convert", "Make an existing project Penchant-isized"
|
@@ -24,11 +28,12 @@ class PenchantCLI < Thor
|
|
24
28
|
gemfile(:remote)
|
25
29
|
end
|
26
30
|
|
31
|
+
method_options :deployment => false
|
27
32
|
desc "gemfile ENV", "Switch the gemfile environment, or rebuild the current environment if not given"
|
28
33
|
def gemfile(env = get_current_env)
|
29
34
|
if env
|
30
|
-
puts "[penchant] Rebunding for #{env} environment..."
|
31
|
-
Penchant::Gemfile.do_full_env_switch!(env)
|
35
|
+
puts "[penchant] Rebunding for #{env} environment#{options[:deployment] ? ", deployment mode" : ''}..."
|
36
|
+
Penchant::Gemfile.do_full_env_switch!(env, options[:deployment])
|
32
37
|
end
|
33
38
|
|
34
39
|
gemfile = Penchant::Gemfile.new
|
@@ -47,7 +52,9 @@ class PenchantCLI < Thor
|
|
47
52
|
no_tasks do
|
48
53
|
def get_current_env
|
49
54
|
gemfile = Penchant::Gemfile.new
|
50
|
-
gemfile.environment
|
55
|
+
out = [ gemfile.environment ]
|
56
|
+
out << "deployment" if gemfile.deployment?
|
57
|
+
out.join(' ')
|
51
58
|
end
|
52
59
|
end
|
53
60
|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Penchant
|
2
2
|
class DotPenchant
|
3
3
|
class << self
|
4
|
-
def run(env = nil)
|
4
|
+
def run(env = nil, deployment = false)
|
5
5
|
dot_penchant = new
|
6
6
|
dot_penchant.run(env)
|
7
7
|
dot_penchant
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def run(env = nil)
|
11
|
+
def run(env = nil, deployment = false)
|
12
12
|
instance_eval(File.read('.penchant'))
|
13
13
|
end
|
14
14
|
|
@@ -22,7 +22,6 @@ module Penchant
|
|
22
22
|
def gemfile?
|
23
23
|
File.file?('Gemfile')
|
24
24
|
end
|
25
|
-
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
data/lib/penchant/gemfile.rb
CHANGED
@@ -5,15 +5,15 @@ module Penchant
|
|
5
5
|
attr_reader :path
|
6
6
|
|
7
7
|
class << self
|
8
|
-
def do_full_env_switch!(env)
|
8
|
+
def do_full_env_switch!(env, deployment = false)
|
9
9
|
gemfile = Penchant::Gemfile.new
|
10
|
-
gemfile.run_dot_penchant!(env)
|
10
|
+
gemfile.run_dot_penchant!(env, deployment)
|
11
11
|
|
12
12
|
if !gemfile.has_gemfile_erb?
|
13
13
|
return false
|
14
14
|
end
|
15
15
|
|
16
|
-
gemfile.switch_to!(env)
|
16
|
+
gemfile.switch_to!(env, deployment)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -42,22 +42,26 @@ module Penchant
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def environment
|
45
|
-
File.readlines(gemfile_path).first.strip[%r{environment: (
|
45
|
+
File.readlines(gemfile_path).first.strip[%r{environment: ([^, ]*)}, 1]
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
|
48
|
+
def deployment?
|
49
|
+
File.readlines(gemfile_path).first['deployment mode'] != nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def switch_to!(gemfile_env = nil, deployment = false)
|
53
|
+
@env, @is_deployment = gemfile_env, deployment
|
50
54
|
template = File.read(gemfile_erb_path)
|
51
55
|
|
52
56
|
File.open(gemfile_path, 'wb') do |fh|
|
53
|
-
fh.puts "# generated by penchant, environment: #{@env}"
|
57
|
+
fh.puts "# generated by penchant, environment: #{@env || "none"}#{@is_deployment ? " , deployment mode" : ""}"
|
54
58
|
|
55
59
|
fh.print ERB.new(template).result(binding)
|
56
60
|
end
|
57
61
|
end
|
58
62
|
|
59
|
-
def run_dot_penchant!(env)
|
60
|
-
DotPenchant.run(env || environment) if has_dot_penchant?
|
63
|
+
def run_dot_penchant!(env, deployment)
|
64
|
+
DotPenchant.run(env || environment, deployment) if has_dot_penchant?
|
61
65
|
end
|
62
66
|
|
63
67
|
private
|
@@ -68,6 +72,10 @@ module Penchant
|
|
68
72
|
def env(check, &block)
|
69
73
|
instance_eval(&block) if check.to_s == @env.to_s
|
70
74
|
end
|
75
|
+
|
76
|
+
def no_deployment(&block)
|
77
|
+
instance_eval(&block) if !@is_deployment
|
78
|
+
end
|
71
79
|
end
|
72
80
|
end
|
73
81
|
|
data/lib/penchant/version.rb
CHANGED
data/script/hooks/pre-commit
CHANGED
@@ -47,6 +47,17 @@ describe Penchant::Gemfile do
|
|
47
47
|
GEMFILE
|
48
48
|
|
49
49
|
its(:environment) { should == environment }
|
50
|
+
it { should_not be_deployment }
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'deployment' do
|
54
|
+
let(:environment) { 'test' }
|
55
|
+
let(:data) { <<-GEMFILE }
|
56
|
+
# generated by penchant, environment: #{environment}, deployment mode
|
57
|
+
GEMFILE
|
58
|
+
|
59
|
+
its(:environment) { should == environment }
|
60
|
+
it { should be_deployment }
|
50
61
|
end
|
51
62
|
end
|
52
63
|
|
@@ -77,6 +88,10 @@ GEMFILE
|
|
77
88
|
not
|
78
89
|
<% end %>
|
79
90
|
|
91
|
+
<% no_deployment do %>
|
92
|
+
diddeploy
|
93
|
+
<% end %>
|
94
|
+
|
80
95
|
all
|
81
96
|
ERB
|
82
97
|
|
@@ -84,6 +99,7 @@ ERB
|
|
84
99
|
subject.switch_to!(:test)
|
85
100
|
|
86
101
|
File.read('Gemfile').should include('test')
|
102
|
+
File.read('Gemfile').should include('diddeploy')
|
87
103
|
File.read('Gemfile').should_not include('not')
|
88
104
|
File.read('Gemfile').should include('all')
|
89
105
|
end
|
@@ -92,6 +108,7 @@ ERB
|
|
92
108
|
subject.switch_to!(:not)
|
93
109
|
|
94
110
|
File.read('Gemfile').should_not include('test')
|
111
|
+
File.read('Gemfile').should include('diddeploy')
|
95
112
|
File.read('Gemfile').should include('not')
|
96
113
|
File.read('Gemfile').should include('all')
|
97
114
|
end
|
@@ -101,6 +118,16 @@ ERB
|
|
101
118
|
|
102
119
|
File.read('Gemfile').should_not include('test')
|
103
120
|
File.read('Gemfile').should_not include('not')
|
121
|
+
File.read('Gemfile').should include('diddeploy')
|
122
|
+
File.read('Gemfile').should include('all')
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should skip no_deployment sections' do
|
126
|
+
subject.switch_to!(nil, true)
|
127
|
+
|
128
|
+
File.read('Gemfile').should_not include('test')
|
129
|
+
File.read('Gemfile').should_not include('not')
|
130
|
+
File.read('Gemfile').should_not include('diddeploy')
|
104
131
|
File.read('Gemfile').should include('all')
|
105
132
|
end
|
106
133
|
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
OLD_GIT_DIR=$GIT_DIR
|
4
4
|
|
5
|
-
if [ "$(penchant gemfile-env)" != "remote" ]; then
|
5
|
+
if [ "$(penchant gemfile-env)" != "remote deployment" ]; then
|
6
6
|
unset GIT_DIR
|
7
|
-
penchant gemfile remote
|
7
|
+
penchant gemfile remote --deployment
|
8
8
|
GIT_DIR=$OLD_GIT_DIR
|
9
9
|
git add Gemfile*
|
10
10
|
fi
|
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.
|
4
|
+
version: 0.0.5
|
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-
|
12
|
+
date: 2011-10-13 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
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- spec/lib/penchant_spec.rb
|
41
41
|
- spec/spec_helper.rb
|
42
42
|
- template/script/gemfile
|
43
|
+
- template/script/hooks/post-commit
|
43
44
|
- template/script/hooks/pre-commit
|
44
45
|
- template/script/initialize-environment
|
45
46
|
- template/script/install-git-hooks
|
@@ -63,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
64
|
version: '0'
|
64
65
|
requirements: []
|
65
66
|
rubyforge_project: penchant
|
66
|
-
rubygems_version: 1.8.
|
67
|
+
rubygems_version: 1.8.11
|
67
68
|
signing_key:
|
68
69
|
specification_version: 3
|
69
70
|
summary: Things I do for my Rails projects to get up to speed in new environments
|