penchant 0.2.6 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +27 -2
- data/features/ruby_gemfile.feature +27 -1
- data/lib/penchant/gemfile.rb +38 -5
- data/lib/penchant/version.rb +1 -1
- data/penchant.gemspec +2 -0
- metadata +21 -5
data/README.md
CHANGED
@@ -5,6 +5,7 @@ I like to do these things in all my projects:
|
|
5
5
|
* Have all my tests run before committing. I don't like buying ice cream for the team on test failures.
|
6
6
|
* If I'm developing gems alongside this project, I use a `Gemfile.penchant` to get around the "one gem, one source" issue in
|
7
7
|
current versions of Bundler.
|
8
|
+
* I can also factor out and simplify a lot of my Gemfile settings.
|
8
9
|
* If I'm moving to different machines or (heaven forbid!) having other developers work on the project, I want to make
|
9
10
|
getting all those local gems as easy as possible.
|
10
11
|
|
@@ -24,6 +25,7 @@ Installs a bunch of scripts into the `scripts` directory of your project:
|
|
24
25
|
Yeah, it's a `Gemfile` with some extras:
|
25
26
|
|
26
27
|
``` ruby
|
28
|
+
# Gemfile.penchant
|
27
29
|
source :rubygems
|
28
30
|
|
29
31
|
gem 'rails', '3.2.3'
|
@@ -48,7 +50,7 @@ no_deployment do
|
|
48
50
|
#
|
49
51
|
# gem 'flowerbox', :path => '../flowerbox', :require => nil
|
50
52
|
# gem 'guard-flowerbox', :path => '../guard-flowerbox', :require => nil
|
51
|
-
gems dev_gems, :path => '../%s'
|
53
|
+
gems dev_gems, :path => '../%s' # the %s is the name of the gem
|
52
54
|
end
|
53
55
|
|
54
56
|
env :remote do
|
@@ -103,6 +105,29 @@ end
|
|
103
105
|
Run `penchant gemfile ENV --deployment` to get this behavior. This is run by default when the
|
104
106
|
pre-commit git hook runs, but only after the default Rake task passes.
|
105
107
|
|
108
|
+
#### Won't this change the project dependencies?!
|
109
|
+
|
110
|
+
Probably not. You probably have the "main" gems in your project locked to a version of Rails or
|
111
|
+
Sinatra or something else, and all of the other gems for authentication, queue processing, etc. are
|
112
|
+
dependent on that framework. Ripping out your testing framework and deployment helpers really
|
113
|
+
shouldn't be changing the main versions of your application gems. It WORKSFORME and YMMV.
|
114
|
+
|
115
|
+
### Getting local gems all set up
|
116
|
+
|
117
|
+
`penchant bootstrap` will go through and find all git repo references in your `Gemfile.penchant` and
|
118
|
+
will download them to the specified directory (by default, '..'). This means blocks like this
|
119
|
+
will work as expected when you `penchant bootstrap` and then `penchant gemfile local`:
|
120
|
+
|
121
|
+
``` ruby
|
122
|
+
env :local do
|
123
|
+
gem 'my-gem', :path => '../%s'
|
124
|
+
end
|
125
|
+
|
126
|
+
env :remote do
|
127
|
+
gem 'my-gem', :git => 'git://github.com/johnbintz/%s.git'
|
128
|
+
end
|
129
|
+
```
|
130
|
+
|
106
131
|
## initialize-environment
|
107
132
|
|
108
133
|
Get new developers up to speed fast! `script/initialize-environment` does the following when run:
|
@@ -135,7 +160,7 @@ to your commit if they've changed.
|
|
135
160
|
|
136
161
|
### Skipping all that Rake falderal?
|
137
162
|
|
138
|
-
Do it Travis CI style: stick `[ci skip]` in your commit message. That's why the meat of
|
163
|
+
Do it Travis CI style: stick `[ci skip]` in your commit message. That's why the meat of the git hooks resides in
|
139
164
|
`commit-msg` and not `pre-commit`: you need the commit message before you can determine if the tests should be run
|
140
165
|
based on the commit message. Weird, I know.
|
141
166
|
|
@@ -182,6 +182,18 @@ Feature: Gemfiles
|
|
182
182
|
Then I should get the following repositories:
|
183
183
|
| git://github.cats/two.git |
|
184
184
|
|
185
|
+
Scenario: Get the list of git repos defined, regardless of environment
|
186
|
+
Given I have the file "Gemfile.penchant" with the content:
|
187
|
+
"""
|
188
|
+
gem 'one', :path => '../%s'
|
189
|
+
env :remote do
|
190
|
+
gem 'two', :git => 'git://github.cats/%s.git'
|
191
|
+
end
|
192
|
+
"""
|
193
|
+
When I request the list of git repositories
|
194
|
+
Then I should get the following repositories:
|
195
|
+
| git://github.cats/two.git |
|
196
|
+
|
185
197
|
Scenario: Propose defaults for a gem
|
186
198
|
Given I have the file "Gemfile.penchant" with the content:
|
187
199
|
"""
|
@@ -195,7 +207,6 @@ Feature: Gemfiles
|
|
195
207
|
gem "one", "1.2.3", {:path=>"../one"}
|
196
208
|
"""
|
197
209
|
|
198
|
-
@wip
|
199
210
|
Scenario: Propose defaults for an array of gems
|
200
211
|
Given I have the file "Gemfile.penchant" with the content:
|
201
212
|
"""
|
@@ -208,3 +219,18 @@ Feature: Gemfiles
|
|
208
219
|
# generated by penchant, environment: local
|
209
220
|
gem "one", "1.2.3", {:path=>"../one"}
|
210
221
|
"""
|
222
|
+
|
223
|
+
Scenario: Propose defaults for an environment
|
224
|
+
Given I have the file "Gemfile.penchant" with the content:
|
225
|
+
"""
|
226
|
+
defaults_for env(:local), :path => '../%s'
|
227
|
+
env :local do
|
228
|
+
gem 'one', '1.2.3'
|
229
|
+
end
|
230
|
+
"""
|
231
|
+
When I rebuild the Gemfile for "local" mode
|
232
|
+
Then the file "Gemfile" should have the following content:
|
233
|
+
"""
|
234
|
+
# generated by penchant, environment: local
|
235
|
+
gem "one", "1.2.3", {:path=>"../one"}
|
236
|
+
"""
|
data/lib/penchant/gemfile.rb
CHANGED
@@ -83,9 +83,27 @@ module Penchant
|
|
83
83
|
gemfile_header['deployment mode'] != nil
|
84
84
|
end
|
85
85
|
|
86
|
+
class Env
|
87
|
+
attr_accessor :name
|
88
|
+
|
89
|
+
def initialize(name)
|
90
|
+
@name = name.to_s
|
91
|
+
end
|
92
|
+
|
93
|
+
def ==(other)
|
94
|
+
@name == other.name
|
95
|
+
end
|
96
|
+
|
97
|
+
def to_s
|
98
|
+
"@#{name}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
86
102
|
class FileProcessor
|
87
103
|
attr_reader :environment, :is_deployment, :available_environments, :defined_git_repos
|
88
104
|
|
105
|
+
ANY_ENVIRONMENT = :any_environment
|
106
|
+
|
89
107
|
def self.result(data, *args)
|
90
108
|
new(data).result(*args)
|
91
109
|
end
|
@@ -103,6 +121,8 @@ module Penchant
|
|
103
121
|
@available_environments = []
|
104
122
|
@defined_git_repos = []
|
105
123
|
@defaults = {}
|
124
|
+
|
125
|
+
@_current_env_defaults = {}
|
106
126
|
end
|
107
127
|
|
108
128
|
def result(_env, _is_deployment)
|
@@ -119,7 +139,19 @@ module Penchant
|
|
119
139
|
def env(*args)
|
120
140
|
@available_environments += args
|
121
141
|
|
122
|
-
|
142
|
+
if block_given?
|
143
|
+
if for_environment?(args)
|
144
|
+
@_current_env_defaults = _defaults_for(Env.new(environment))
|
145
|
+
yield
|
146
|
+
@_current_env_defaults = {}
|
147
|
+
end
|
148
|
+
else
|
149
|
+
Penchant::Gemfile::Env.new(args.shift)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def for_environment?(envs)
|
154
|
+
envs.include?(environment) || environment == ANY_ENVIRONMENT
|
123
155
|
end
|
124
156
|
|
125
157
|
def no_deployment
|
@@ -170,7 +202,8 @@ module Penchant
|
|
170
202
|
end
|
171
203
|
|
172
204
|
def _defaults_for(gem_name)
|
173
|
-
|
205
|
+
result = @_current_env_defaults
|
206
|
+
result.merge(@defaults[gem_name.to_s] || {})
|
174
207
|
end
|
175
208
|
|
176
209
|
def current_os
|
@@ -303,7 +336,7 @@ module Penchant
|
|
303
336
|
end
|
304
337
|
|
305
338
|
def defined_git_repos
|
306
|
-
process
|
339
|
+
process(FileProcessor::ANY_ENVIRONMENT)
|
307
340
|
builder.defined_git_repos
|
308
341
|
end
|
309
342
|
|
@@ -342,8 +375,8 @@ module Penchant
|
|
342
375
|
File.join(@path, file)
|
343
376
|
end
|
344
377
|
|
345
|
-
def process
|
346
|
-
builder.result(
|
378
|
+
def process(env = @env)
|
379
|
+
builder.result(env, @is_deployment)
|
347
380
|
end
|
348
381
|
|
349
382
|
def builder
|
data/lib/penchant/version.rb
CHANGED
data/penchant.gemspec
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.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-06-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
14
30
|
description: Things I do for my Rails projects to get up to speed in new environments
|
15
31
|
fast
|
16
32
|
email:
|
@@ -81,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
97
|
version: '0'
|
82
98
|
segments:
|
83
99
|
- 0
|
84
|
-
hash:
|
100
|
+
hash: 4263770194857896104
|
85
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
102
|
none: false
|
87
103
|
requirements:
|
@@ -90,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
106
|
version: '0'
|
91
107
|
segments:
|
92
108
|
- 0
|
93
|
-
hash:
|
109
|
+
hash: 4263770194857896104
|
94
110
|
requirements: []
|
95
111
|
rubyforge_project: penchant
|
96
112
|
rubygems_version: 1.8.23
|