penchant 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/penchant +16 -0
- data/features/gemfile.feature +16 -2
- data/features/ruby_gemfile.feature +32 -1
- data/features/step_definitions/then/i_should_get_the_following_environments.rb +3 -0
- data/features/step_definitions/then/i_should_get_the_following_repositories.rb +4 -0
- data/features/step_definitions/when/i_request_the_list_of_environments_available.rb +3 -0
- data/features/step_definitions/when/i_request_the_list_of_git_repositories.rb +3 -0
- data/lib/penchant/gemfile.rb +51 -8
- data/lib/penchant/repo.rb +16 -0
- data/lib/penchant/version.rb +1 -1
- data/lib/penchant.rb +1 -0
- data/spec/lib/penchant/gemfile_spec.rb +1 -1
- metadata +11 -2
data/bin/penchant
CHANGED
@@ -63,6 +63,22 @@ class PenchantCLI < Thor
|
|
63
63
|
puts get_current_env
|
64
64
|
end
|
65
65
|
|
66
|
+
desc "bootstrap [DIR = ..]", "Download all referred-to git repos to the specified directory"
|
67
|
+
def bootstrap(dir = '..')
|
68
|
+
Penchant::Gemfile.defined_git_repos.each do |repo|
|
69
|
+
puts "Cloning #{repo} to #{dir}."
|
70
|
+
repo.clone_to(dir)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def method_missing(method, *args)
|
75
|
+
if Penchant::Gemfile.available_environments.include?(method)
|
76
|
+
gemfile(method, *args)
|
77
|
+
else
|
78
|
+
super(method, *args)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
66
82
|
no_tasks do
|
67
83
|
def get_current_env
|
68
84
|
gemfile = Penchant::Gemfile.new
|
data/features/gemfile.feature
CHANGED
@@ -32,6 +32,19 @@ Feature: Gemfiles
|
|
32
32
|
this is content
|
33
33
|
"""
|
34
34
|
|
35
|
+
Scenario: Simple env
|
36
|
+
Given I have the file "Gemfile.erb" with the content:
|
37
|
+
"""
|
38
|
+
<% env :local do %>
|
39
|
+
gem 'test'
|
40
|
+
<% end %>
|
41
|
+
"""
|
42
|
+
When I rebuild the Gemfile for "local" mode
|
43
|
+
Then the file "Gemfile" should have the following stripped content:
|
44
|
+
"""
|
45
|
+
# generated by penchant, environment: local
|
46
|
+
gem 'test'
|
47
|
+
"""
|
35
48
|
Scenario: Use placeholder expansion
|
36
49
|
Given I have the file "Gemfile.erb" with the content:
|
37
50
|
"""
|
@@ -40,10 +53,11 @@ Feature: Gemfiles
|
|
40
53
|
<% end %>
|
41
54
|
"""
|
42
55
|
When I rebuild the Gemfile for "local" mode
|
56
|
+
|
43
57
|
Then the file "Gemfile" should have the following stripped content:
|
44
58
|
"""
|
45
59
|
# generated by penchant, environment: local
|
46
|
-
gem 'test', :path
|
60
|
+
gem 'test', {:path=>"../test"}
|
47
61
|
"""
|
48
62
|
|
49
63
|
Scenario: Use a gem list for an operation
|
@@ -59,7 +73,7 @@ Feature: Gemfiles
|
|
59
73
|
Then the file "Gemfile" should have the following stripped content:
|
60
74
|
"""
|
61
75
|
# generated by penchant, environment: local
|
62
|
-
gem 'test', :path
|
76
|
+
gem 'test', {:path=>"../test"}
|
63
77
|
"""
|
64
78
|
|
65
79
|
Scenario: Let gem get additional info
|
@@ -1,10 +1,13 @@
|
|
1
1
|
@fakefs
|
2
2
|
Feature: Gemfiles
|
3
|
+
@wip
|
3
4
|
Scenario: Process a pure Ruby gemfile
|
4
5
|
Given I have the file "Gemfile.penchant" with the content:
|
5
6
|
"""
|
6
7
|
source :rubygems
|
7
8
|
|
9
|
+
gemspec
|
10
|
+
|
8
11
|
group :cats, :dogs do
|
9
12
|
case environment
|
10
13
|
when :local
|
@@ -19,6 +22,7 @@ Feature: Gemfiles
|
|
19
22
|
"""
|
20
23
|
# generated by penchant, environment: local
|
21
24
|
source :rubygems
|
25
|
+
gemspec
|
22
26
|
|
23
27
|
group :cats, :dogs do
|
24
28
|
gem "test", {:path=>"../test"}
|
@@ -29,6 +33,7 @@ Feature: Gemfiles
|
|
29
33
|
"""
|
30
34
|
# generated by penchant, environment: remote
|
31
35
|
source :rubygems
|
36
|
+
gemspec
|
32
37
|
|
33
38
|
group :cats, :dogs do
|
34
39
|
gem "test", {:git=>"git://github.com/johnbintz/test.git"}
|
@@ -129,7 +134,7 @@ Feature: Gemfiles
|
|
129
134
|
gem "one", {:path=>"../one"}
|
130
135
|
"""
|
131
136
|
|
132
|
-
@
|
137
|
+
@mocha
|
133
138
|
Scenario: OS-specific blocks
|
134
139
|
Given I have the file "Gemfile.penchant" with the content:
|
135
140
|
"""
|
@@ -152,3 +157,29 @@ Feature: Gemfiles
|
|
152
157
|
|
153
158
|
"""
|
154
159
|
|
160
|
+
Scenario: Get the list of environments defined
|
161
|
+
Given I have the file "Gemfile.penchant" with the content:
|
162
|
+
"""
|
163
|
+
env :cat do
|
164
|
+
gem 'one', :path => '../%s'
|
165
|
+
end
|
166
|
+
|
167
|
+
env :dog do
|
168
|
+
gem 'two', :path => '../%s'
|
169
|
+
end
|
170
|
+
"""
|
171
|
+
When I request the list of environments available
|
172
|
+
Then I should get the following environments:
|
173
|
+
| cat |
|
174
|
+
| dog |
|
175
|
+
|
176
|
+
Scenario: Get the list of git repos defined
|
177
|
+
Given I have the file "Gemfile.penchant" with the content:
|
178
|
+
"""
|
179
|
+
gem 'one', :path => '../%s'
|
180
|
+
gem 'two', :git => 'git://github.cats/%s.git'
|
181
|
+
"""
|
182
|
+
When I request the list of git repositories
|
183
|
+
Then I should get the following repositories:
|
184
|
+
| git://github.cats/two.git |
|
185
|
+
|
data/lib/penchant/gemfile.rb
CHANGED
@@ -17,17 +17,26 @@ module Penchant
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.pre_switch(env, deployment = false)
|
20
|
-
gemfile =
|
20
|
+
gemfile = new
|
21
21
|
return false if !gemfile.has_processable_gemfile?
|
22
22
|
gemfile.run_dot_penchant!(env, deployment)
|
23
23
|
|
24
24
|
gemfile
|
25
25
|
end
|
26
26
|
|
27
|
+
def self.available_environments
|
28
|
+
new.available_environments
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.defined_git_repos
|
32
|
+
new.defined_git_repos
|
33
|
+
end
|
34
|
+
|
27
35
|
def current_env ; @env ; end
|
28
36
|
|
29
37
|
def initialize(path = Dir.pwd)
|
30
38
|
@path = path
|
39
|
+
@env = environment
|
31
40
|
end
|
32
41
|
|
33
42
|
def gemfile_path
|
@@ -75,7 +84,7 @@ module Penchant
|
|
75
84
|
end
|
76
85
|
|
77
86
|
class FileProcessor
|
78
|
-
attr_reader :environment, :is_deployment
|
87
|
+
attr_reader :environment, :is_deployment, :available_environments, :defined_git_repos
|
79
88
|
|
80
89
|
def self.result(data, *args)
|
81
90
|
new(data).result(*args)
|
@@ -91,6 +100,8 @@ module Penchant
|
|
91
100
|
|
92
101
|
def initialize(data)
|
93
102
|
@data = data
|
103
|
+
@available_environments = []
|
104
|
+
@defined_git_repos = []
|
94
105
|
end
|
95
106
|
|
96
107
|
def result(_env, _is_deployment)
|
@@ -105,6 +116,8 @@ module Penchant
|
|
105
116
|
end
|
106
117
|
|
107
118
|
def env(*args)
|
119
|
+
@available_environments += args
|
120
|
+
|
108
121
|
yield if args.include?(environment)
|
109
122
|
end
|
110
123
|
|
@@ -168,14 +181,20 @@ module Penchant
|
|
168
181
|
end
|
169
182
|
|
170
183
|
def env(check, template = {}, &block)
|
171
|
-
if check.to_s == @
|
184
|
+
if check.to_s == @environment.to_s
|
172
185
|
original_erbout = @_erbout.dup
|
173
186
|
|
174
187
|
output = instance_eval(&block).lines.to_a
|
175
188
|
|
176
189
|
output.each do |line|
|
177
190
|
if gem_name = line[%r{gem ['"]([^'"]+)['"]}, 1]
|
178
|
-
line.
|
191
|
+
new_line = line.rstrip
|
192
|
+
|
193
|
+
if !(options = process_options(gem_name, template)).empty?
|
194
|
+
new_line += ", #{options.inspect}"
|
195
|
+
end
|
196
|
+
|
197
|
+
line.replace(new_line + "\n")
|
179
198
|
end
|
180
199
|
end
|
181
200
|
|
@@ -220,9 +239,17 @@ module Penchant
|
|
220
239
|
args = [ gem_name.first ]
|
221
240
|
args << options if !options.empty?
|
222
241
|
|
242
|
+
if options[:git]
|
243
|
+
@defined_git_repos << Penchant::Repo.new(options[:git])
|
244
|
+
end
|
245
|
+
|
223
246
|
@output << %{gem #{args_to_string(args)}}
|
224
247
|
end
|
225
248
|
|
249
|
+
def gemspec
|
250
|
+
@output << %{gemspec}
|
251
|
+
end
|
252
|
+
|
226
253
|
def gems(*args)
|
227
254
|
gems, template = split_args(args)
|
228
255
|
|
@@ -250,10 +277,20 @@ module Penchant
|
|
250
277
|
end
|
251
278
|
end
|
252
279
|
|
280
|
+
def available_environments
|
281
|
+
process
|
282
|
+
builder.available_environments
|
283
|
+
end
|
284
|
+
|
285
|
+
def defined_git_repos
|
286
|
+
process
|
287
|
+
builder.defined_git_repos
|
288
|
+
end
|
289
|
+
|
253
290
|
def switch_to!(gemfile_env = nil, deployment = false)
|
254
291
|
@env, @is_deployment = gemfile_env, deployment
|
255
292
|
|
256
|
-
output = [ header, process
|
293
|
+
output = [ header, process ]
|
257
294
|
|
258
295
|
File.open(gemfile_path, 'wb') { |fh| fh.print output.join("\n") }
|
259
296
|
end
|
@@ -285,15 +322,21 @@ module Penchant
|
|
285
322
|
File.join(@path, file)
|
286
323
|
end
|
287
324
|
|
288
|
-
def process
|
289
|
-
builder
|
325
|
+
def process
|
326
|
+
builder.result(@env, @is_deployment)
|
327
|
+
end
|
328
|
+
|
329
|
+
def builder
|
330
|
+
return @builder if @builder
|
331
|
+
|
332
|
+
klass = case File.extname(processable_gemfile_path)
|
290
333
|
when '.penchant'
|
291
334
|
PenchantFile
|
292
335
|
when '.erb'
|
293
336
|
ERBFile
|
294
337
|
end
|
295
338
|
|
296
|
-
builder.
|
339
|
+
@builder = klass.new(template)
|
297
340
|
end
|
298
341
|
|
299
342
|
def template
|
data/lib/penchant/version.rb
CHANGED
data/lib/penchant.rb
CHANGED
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.2.
|
4
|
+
version: 0.2.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: 2012-06-
|
12
|
+
date: 2012-06-08 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Things I do for my Rails projects to get up to speed in new environments
|
15
15
|
fast
|
@@ -32,18 +32,23 @@ files:
|
|
32
32
|
- features/ruby_gemfile.feature
|
33
33
|
- features/step_definitions/given/i_am_on_the_linux_platform.rb
|
34
34
|
- features/step_definitions/given/i_have_the_file_with_content.rb
|
35
|
+
- features/step_definitions/then/i_should_get_the_following_environments.rb
|
36
|
+
- features/step_definitions/then/i_should_get_the_following_repositories.rb
|
35
37
|
- features/step_definitions/then/the_file_gemfile_should_have_the_following_stripped_content.rb
|
36
38
|
- features/step_definitions/then/the_file_should_have_content.rb
|
37
39
|
- features/step_definitions/then/the_output_should_include.rb
|
38
40
|
- features/step_definitions/when/i_rebuild_the_gemfile_for_local_mode.rb
|
39
41
|
- features/step_definitions/when/i_rebuild_the_gemfile_switching_back.rb
|
40
42
|
- features/step_definitions/when/i_rebuild_the_gemfile_with_deployment.rb
|
43
|
+
- features/step_definitions/when/i_request_the_list_of_environments_available.rb
|
44
|
+
- features/step_definitions/when/i_request_the_list_of_git_repositories.rb
|
41
45
|
- features/step_definitions/when/i_run_in.rb
|
42
46
|
- features/support/cuke-pack.rb
|
43
47
|
- features/support/env.rb
|
44
48
|
- lib/penchant.rb
|
45
49
|
- lib/penchant/dot_penchant.rb
|
46
50
|
- lib/penchant/gemfile.rb
|
51
|
+
- lib/penchant/repo.rb
|
47
52
|
- lib/penchant/version.rb
|
48
53
|
- penchant.gemspec
|
49
54
|
- script/gemfile
|
@@ -93,12 +98,16 @@ test_files:
|
|
93
98
|
- features/ruby_gemfile.feature
|
94
99
|
- features/step_definitions/given/i_am_on_the_linux_platform.rb
|
95
100
|
- features/step_definitions/given/i_have_the_file_with_content.rb
|
101
|
+
- features/step_definitions/then/i_should_get_the_following_environments.rb
|
102
|
+
- features/step_definitions/then/i_should_get_the_following_repositories.rb
|
96
103
|
- features/step_definitions/then/the_file_gemfile_should_have_the_following_stripped_content.rb
|
97
104
|
- features/step_definitions/then/the_file_should_have_content.rb
|
98
105
|
- features/step_definitions/then/the_output_should_include.rb
|
99
106
|
- features/step_definitions/when/i_rebuild_the_gemfile_for_local_mode.rb
|
100
107
|
- features/step_definitions/when/i_rebuild_the_gemfile_switching_back.rb
|
101
108
|
- features/step_definitions/when/i_rebuild_the_gemfile_with_deployment.rb
|
109
|
+
- features/step_definitions/when/i_request_the_list_of_environments_available.rb
|
110
|
+
- features/step_definitions/when/i_request_the_list_of_git_repositories.rb
|
102
111
|
- features/step_definitions/when/i_run_in.rb
|
103
112
|
- features/support/cuke-pack.rb
|
104
113
|
- features/support/env.rb
|