rain 1.0.1

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.
Files changed (52) hide show
  1. data/LICENSE.md +20 -0
  2. data/README.md +128 -0
  3. data/Rakefile +38 -0
  4. data/bin/rain +11 -0
  5. data/lib/generators/rain/install/USAGE +10 -0
  6. data/lib/generators/rain/install/install_generator.rb +24 -0
  7. data/lib/generators/rain/install/templates/versions.yml +3 -0
  8. data/lib/rain.rb +17 -0
  9. data/lib/rain/capistrano.rb +25 -0
  10. data/lib/rain/config.rb +21 -0
  11. data/lib/rain/deployer.rb +54 -0
  12. data/lib/rain/git_tools.rb +109 -0
  13. data/lib/rain/git_tools/release_tag.rb +46 -0
  14. data/lib/rain/semantic_version.rb +20 -0
  15. data/lib/rain/version.rb +3 -0
  16. data/lib/tasks/rain_tasks.rake +5 -0
  17. data/test/dummy/README.rdoc +261 -0
  18. data/test/dummy/Rakefile +7 -0
  19. data/test/dummy/app/assets/javascripts/application.js +15 -0
  20. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  21. data/test/dummy/app/controllers/application_controller.rb +3 -0
  22. data/test/dummy/app/helpers/application_helper.rb +2 -0
  23. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  24. data/test/dummy/config.ru +4 -0
  25. data/test/dummy/config/application.rb +59 -0
  26. data/test/dummy/config/boot.rb +10 -0
  27. data/test/dummy/config/database.yml +20 -0
  28. data/test/dummy/config/environment.rb +5 -0
  29. data/test/dummy/config/environments/development.rb +37 -0
  30. data/test/dummy/config/environments/production.rb +67 -0
  31. data/test/dummy/config/environments/test.rb +37 -0
  32. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  33. data/test/dummy/config/initializers/inflections.rb +15 -0
  34. data/test/dummy/config/initializers/mime_types.rb +5 -0
  35. data/test/dummy/config/initializers/secret_token.rb +7 -0
  36. data/test/dummy/config/initializers/session_store.rb +8 -0
  37. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  38. data/test/dummy/config/locales/en.yml +5 -0
  39. data/test/dummy/config/routes.rb +58 -0
  40. data/test/dummy/config/versions.yml +4 -0
  41. data/test/dummy/public/404.html +26 -0
  42. data/test/dummy/public/422.html +26 -0
  43. data/test/dummy/public/500.html +25 -0
  44. data/test/dummy/public/favicon.ico +0 -0
  45. data/test/dummy/script/rails +6 -0
  46. data/test/rain/config_test.rb +13 -0
  47. data/test/rain/deployer_test.rb +49 -0
  48. data/test/rain/git_tools/release_tag_test.rb +21 -0
  49. data/test/rain/git_tools_test.rb +101 -0
  50. data/test/rain_test.rb +7 -0
  51. data/test/test_helper.rb +35 -0
  52. metadata +304 -0
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ class GitTools::ReleaseTagTest < ActiveSupport::TestCase
4
+ include GitTools
5
+
6
+ describe "ReleaseTag: Comparison" do
7
+ should "compare numerically with the other tag" do
8
+ pre_release = ReleaseTag.new("rel_0.5.0.0")
9
+ final_release = ReleaseTag.new("rel_1.0.0.0")
10
+
11
+ refute_equal pre_release, final_release
12
+
13
+ pre_release.major = 1
14
+ pre_release.minor = 0
15
+ pre_release.patch = 0
16
+ pre_release.other = 0
17
+
18
+ assert_equal pre_release, final_release
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,101 @@
1
+ require 'test_helper'
2
+ require 'rain/git_tools'
3
+
4
+ class Rain::GitToolsTest < ActiveSupport::TestCase
5
+ include GitTools
6
+
7
+ describe "GitTools: working_directory_copasetic?" do
8
+ should "return true when forced" do
9
+ assert working_directory_copasetic?(force: true)
10
+ end
11
+ end
12
+
13
+ describe "GitTools: on_master?" do
14
+ should "return true when we are on the master branch" do
15
+ assert %x(git checkout master > /dev/null), "master not checked out"
16
+ assert on_master?
17
+ end
18
+
19
+ should "return false when we are on any other branch" do
20
+ original_branch = %x(git branch | grep '*').gsub! /\*\s|\n/, ""
21
+ assert_equal 'master', original_branch
22
+ assert %x(git checkout -b some-branch > /dev/null), "some-branch not checked out"
23
+ refute on_master?
24
+
25
+ assert %x(git checkout #{original_branch} > /dev/null), "master not checked out"
26
+ assert %x(git branch -d some-branch > /dev/null), "some-branch was not deleted"
27
+ end
28
+ end
29
+
30
+ describe "GitTools: no_changes_pending?" do
31
+ should "return false when there are uncommitted changes" do
32
+ assert %x(echo "test" >> LICENSE.md), "LICENSE.md was not edited"
33
+ refute no_changes_pending?, "LICENSE.md is still clean"
34
+ end
35
+
36
+ should "return true when the directory is clean" do
37
+ assert %x(git checkout HEAD LICENSE.md), "LICENSE.md not reset to HEAD state"
38
+ assert no_changes_pending?, "LICENSE.md is still dirty. Make sure you commit everything else!"
39
+ end
40
+ end
41
+
42
+ describe "GitTools: last_release_tag" do
43
+ setup { %x(git tag rel_9.9.999) }
44
+
45
+ should "return the last release_tag entered into git" do
46
+ assert_equal ReleaseTag.latest, last_release_tag
47
+ end
48
+
49
+ teardown { %x(git tag -d rel_9.9.999) }
50
+ end
51
+
52
+ describe "GitTools: git_name" do
53
+ setup { @original_name = %x(git config user.name); %x(git config user.name "OJ Simpson") }
54
+
55
+ should "return the name set in ~/.gitconfig" do
56
+ assert_equal "OJ Simpson", git_name
57
+ end
58
+
59
+ teardown { %x(git config user.name "#{@original_name}") }
60
+ end
61
+
62
+ describe "GitTools: tagged_latest_version?" do
63
+ setup { %x(git tag rel_0.0.1) }
64
+
65
+ should "return true when the current tag and the latest-released tag are the same" do
66
+ refute_nil ReleaseTag.current
67
+ refute_nil ReleaseTag.latest
68
+ assert tagged_latest_version?, "Latest version not tagged"
69
+ end
70
+
71
+ should "return false when the current tag has not been pushed" do
72
+ assert %x(git tag rel_0.0.2), "Couldn't create latest tag"
73
+ refute tagged_latest_version?, "Latest version tagged"
74
+ assert %x(git tag -d rel_0.0.2), "Couldn't delete tag"
75
+ end
76
+
77
+ teardown { %x(git tag -d rel_0.0.1) }
78
+ end
79
+
80
+ #describe "GitTools: push_tag" do
81
+ #should "push the tag to origin/master"
82
+ #should "log an error if tag is nil"
83
+ #end
84
+
85
+ #describe "GitTools: run_cmd" do
86
+ #should "execute the given shell command"
87
+ #end
88
+
89
+ #describe "GitTools: versions_path" do
90
+ #should "return the full path to the versions.yml file"
91
+ #end
92
+
93
+ #describe "GitTools: versions_hash" do
94
+ #should "return a YAML Hash of the versions.yml file"
95
+ #end
96
+
97
+ #describe "GitTools: update_release_tag" do
98
+ #should "write the versions_hash to versions.yml"
99
+ #should "commit and push that change to origin/master"
100
+ #end
101
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class RainTest < ActiveSupport::TestCase
4
+ test "be a module" do
5
+ assert_kind_of Module, Rain
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ require 'bundler'
10
+ Bundler.require :default, :development
11
+
12
+ # Load support files
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
+
15
+ # Load fixtures from the engine
16
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
17
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
18
+ end
19
+
20
+ class ActiveSupport::TestCase
21
+ setup do
22
+ %x(mkdir -p config)
23
+ File.open File.expand_path('./config/versions.yml'), 'w' do |f|
24
+ f.puts <<YAML
25
+ ---
26
+ stage: rel_0.0.1
27
+ production: rel_0.0.1
28
+ YAML
29
+ end
30
+ end
31
+
32
+ teardown do
33
+ %(rm -rf config/)
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,304 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rain
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tom Scott
9
+ - Rob Di Marco
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-11-20 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 3.2.8
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 3.2.8
31
+ - !ruby/object:Gem::Dependency
32
+ name: thor
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: capistrano
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: minitest
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: guard-minitest
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: guard-bundler
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pg
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: mini_specunit
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: mini_shoulda
145
+ requirement: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: jquery-rails
161
+ requirement: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ description: ! " Rain is a single-command deployment engine for Rails applications.
176
+ It defines a set of conventions for\n deploying the same app version to multiple
177
+ servers in multiple environments. Leveraging Git tags, it\n automatically increments
178
+ versions according to the Semantic Versioning standard and deploys those versions\n
179
+ \ using Capistrano to as many servers and environments as you wish.\"\n"
180
+ email:
181
+ - tom.scott@elocal.com
182
+ - rob@elocal.com
183
+ executables:
184
+ - rain
185
+ extensions: []
186
+ extra_rdoc_files: []
187
+ files:
188
+ - lib/generators/rain/install/install_generator.rb
189
+ - lib/generators/rain/install/templates/versions.yml
190
+ - lib/generators/rain/install/USAGE
191
+ - lib/rain/capistrano.rb
192
+ - lib/rain/config.rb
193
+ - lib/rain/deployer.rb
194
+ - lib/rain/git_tools/release_tag.rb
195
+ - lib/rain/git_tools.rb
196
+ - lib/rain/semantic_version.rb
197
+ - lib/rain/version.rb
198
+ - lib/rain.rb
199
+ - lib/tasks/rain_tasks.rake
200
+ - LICENSE.md
201
+ - Rakefile
202
+ - README.md
203
+ - test/dummy/app/assets/javascripts/application.js
204
+ - test/dummy/app/assets/stylesheets/application.css
205
+ - test/dummy/app/controllers/application_controller.rb
206
+ - test/dummy/app/helpers/application_helper.rb
207
+ - test/dummy/app/views/layouts/application.html.erb
208
+ - test/dummy/config/application.rb
209
+ - test/dummy/config/boot.rb
210
+ - test/dummy/config/database.yml
211
+ - test/dummy/config/environment.rb
212
+ - test/dummy/config/environments/development.rb
213
+ - test/dummy/config/environments/production.rb
214
+ - test/dummy/config/environments/test.rb
215
+ - test/dummy/config/initializers/backtrace_silencers.rb
216
+ - test/dummy/config/initializers/inflections.rb
217
+ - test/dummy/config/initializers/mime_types.rb
218
+ - test/dummy/config/initializers/secret_token.rb
219
+ - test/dummy/config/initializers/session_store.rb
220
+ - test/dummy/config/initializers/wrap_parameters.rb
221
+ - test/dummy/config/locales/en.yml
222
+ - test/dummy/config/routes.rb
223
+ - test/dummy/config/versions.yml
224
+ - test/dummy/config.ru
225
+ - test/dummy/public/404.html
226
+ - test/dummy/public/422.html
227
+ - test/dummy/public/500.html
228
+ - test/dummy/public/favicon.ico
229
+ - test/dummy/Rakefile
230
+ - test/dummy/README.rdoc
231
+ - test/dummy/script/rails
232
+ - test/rain/config_test.rb
233
+ - test/rain/deployer_test.rb
234
+ - test/rain/git_tools/release_tag_test.rb
235
+ - test/rain/git_tools_test.rb
236
+ - test/rain_test.rb
237
+ - test/test_helper.rb
238
+ - bin/rain
239
+ homepage: http://github.com/eLocal/rain
240
+ licenses: []
241
+ post_install_message:
242
+ rdoc_options: []
243
+ require_paths:
244
+ - lib
245
+ required_ruby_version: !ruby/object:Gem::Requirement
246
+ none: false
247
+ requirements:
248
+ - - ! '>='
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ segments:
252
+ - 0
253
+ hash: 206482086383758645
254
+ required_rubygems_version: !ruby/object:Gem::Requirement
255
+ none: false
256
+ requirements:
257
+ - - ! '>='
258
+ - !ruby/object:Gem::Version
259
+ version: '0'
260
+ segments:
261
+ - 0
262
+ hash: 206482086383758645
263
+ requirements: []
264
+ rubyforge_project:
265
+ rubygems_version: 1.8.24
266
+ signing_key:
267
+ specification_version: 3
268
+ summary: Rain is a single-command deployment engine for Rails applications.
269
+ test_files:
270
+ - test/dummy/app/assets/javascripts/application.js
271
+ - test/dummy/app/assets/stylesheets/application.css
272
+ - test/dummy/app/controllers/application_controller.rb
273
+ - test/dummy/app/helpers/application_helper.rb
274
+ - test/dummy/app/views/layouts/application.html.erb
275
+ - test/dummy/config/application.rb
276
+ - test/dummy/config/boot.rb
277
+ - test/dummy/config/database.yml
278
+ - test/dummy/config/environment.rb
279
+ - test/dummy/config/environments/development.rb
280
+ - test/dummy/config/environments/production.rb
281
+ - test/dummy/config/environments/test.rb
282
+ - test/dummy/config/initializers/backtrace_silencers.rb
283
+ - test/dummy/config/initializers/inflections.rb
284
+ - test/dummy/config/initializers/mime_types.rb
285
+ - test/dummy/config/initializers/secret_token.rb
286
+ - test/dummy/config/initializers/session_store.rb
287
+ - test/dummy/config/initializers/wrap_parameters.rb
288
+ - test/dummy/config/locales/en.yml
289
+ - test/dummy/config/routes.rb
290
+ - test/dummy/config/versions.yml
291
+ - test/dummy/config.ru
292
+ - test/dummy/public/404.html
293
+ - test/dummy/public/422.html
294
+ - test/dummy/public/500.html
295
+ - test/dummy/public/favicon.ico
296
+ - test/dummy/Rakefile
297
+ - test/dummy/README.rdoc
298
+ - test/dummy/script/rails
299
+ - test/rain/config_test.rb
300
+ - test/rain/deployer_test.rb
301
+ - test/rain/git_tools/release_tag_test.rb
302
+ - test/rain/git_tools_test.rb
303
+ - test/rain_test.rb
304
+ - test/test_helper.rb