paratrooper 1.4.2 → 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f62f87661b86c70e2e8734ddd93a7e98d1b9efc7
4
- data.tar.gz: b1b2d6d30d6b62b686ff039f1a91835191c7334d
3
+ metadata.gz: 7cdee8a2553bcc4297a5201449429d4be4c9075e
4
+ data.tar.gz: 95a19b97249116f577655ab60298af1d396c3a92
5
5
  SHA512:
6
- metadata.gz: 0aac9f0ed9d23d09603e1851b8fc7da35d463793db9652725cad40e0ad4b043a8f4caea7ac3fa07bbe31a282d1719f62bfe2644f49a21e6c5d2f70f47d2635d2
7
- data.tar.gz: 31c6fb7829cd85e0051c6fe982f17129c83ca47081a099f731a382e430e76ced578067d3b905d0f7bb3da5bfa4c08538bf4f2a084baa1639fe4d326074265397
6
+ metadata.gz: c617517de7e35016f00629f22e5567ac6d57129bcdecb07ce1c6545e32f25d06245d207c53143c8f1df3c0dade39dbfa69b006248b8f001b207ca8a7b16e12e2
7
+ data.tar.gz: 939942fc3004f1deb0134ded9e71b515ce11bd324fc347b2a8df9d52ef380212ec1aabad287eddea0cb852139ae0ab4963d832d2c91fa43ce92bafd09cdabc11
data/.gitignore CHANGED
@@ -1 +1,3 @@
1
1
  *.gem
2
+ bin/*
3
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 1.9.3-p374
1
+ 2.0.0
data/README.md CHANGED
@@ -42,6 +42,14 @@ You can also provide a tag:
42
42
  Paratrooper::Deploy.new('amazing-app', tag: 'staging')
43
43
  ```
44
44
 
45
+ or alternatively:
46
+
47
+ ```ruby
48
+ Paratrooper::Deploy.new('amazing-app') do |deploy|
49
+ deploy.tag = 'staging'
50
+ end
51
+ ```
52
+
45
53
  ## Authentication
46
54
 
47
55
  You can authenticate your Heroku account in a few ways:
@@ -75,6 +83,14 @@ If you use multiple SSH keys for managing multiple accounts, for example in your
75
83
  Paratrooper::Deploy.new('app', deployment_host: 'HOST')
76
84
  ```
77
85
 
86
+ or alternatively:
87
+
88
+ ```ruby
89
+ Paratrooper::Deploy.new('amazing-app') do |deploy|
90
+ deploy.deployment_host = 'HOST'
91
+ end
92
+ ```
93
+
78
94
  This also works if you're using the [heroku-accounts](https://github.com/ddollar/heroku-accounts) plugin:
79
95
 
80
96
  ```ruby
@@ -97,9 +113,18 @@ This will create/update a `staging` git tag at `HEAD`.
97
113
  ```ruby
98
114
  Paratrooper::Deploy.new("amazing-production-app",
99
115
  tag: 'production',
100
- match_tag_to: 'staging'
116
+ match_tag: 'staging'
101
117
  )
102
118
  ```
119
+
120
+ or alternatively:
121
+
122
+ ```ruby
123
+ Paratrooper::Deploy.new('amazing-production-app') do |deploy|
124
+ deploy.tag = 'production'
125
+ deploy.match_tag = 'staging'
126
+ end
127
+ ```
103
128
  This will create/update a `production` git tag at `staging` and deploy the `production` tag.
104
129
 
105
130
  ## Sensible Default Deployment
@@ -133,9 +158,10 @@ namespace :deploy do
133
158
 
134
159
  desc 'Deploy app in production environment'
135
160
  task :production do
136
- deployment = Paratrooper::Deploy.new("amazing-production-app",
137
- tag: 'production',
138
- match_tag_to: 'staging'
161
+ deployment = Paratrooper::Deploy.new("amazing-production-app") do |deploy|
162
+ deploy.tag = 'production',
163
+ deploy.match_tag = 'staging',
164
+ deploy.maintenance_mode = !ENV['NO_MAINTENANCE']
139
165
  )
140
166
 
141
167
  deployment.deploy
@@ -146,43 +172,51 @@ end
146
172
  ## Bucking the Norm
147
173
 
148
174
  Our default deploy gets us most of the way, but maybe it's not for you--we've
149
- got you covered. Every deployment method sends a notification that can be
150
- captured and used in almost any way you can imagine.
175
+ got you covered. Every deployment method has a set of callback instructions that can be
176
+ utilized in almost any way you can imagine.
151
177
 
152
- For example, say you want to let [New Relic][] know that you are deploying and
153
- to disable your application monitoring.
178
+ The `add_callback` method allows for the execution of arbitrary code within different steps of the deploy process.
179
+
180
+ There are 'before' and 'after' hooks for each of the following:
181
+
182
+ * setup
183
+ * activate_maintenance_mode
184
+ * update_repo_tag
185
+ * push_repo
186
+ * run_migrations
187
+ * app_restart
188
+ * deactivate_maintenance_mode
189
+ * warm_instance
190
+ * teardown
154
191
 
155
192
  ### Example Usage
156
193
 
157
- ```ruby
158
- # Gemfile
159
- gem 'paratrooper-newrelic'
194
+ For example, say you want to let [New Relic][] know that you are deploying and
195
+ to disable your application monitoring.
160
196
 
197
+ ```ruby
161
198
  # lib/tasks/deploy.rake
162
199
  require 'paratrooper'
163
200
 
164
201
  namespace :deploy do
165
202
  desc 'Deploy app in production environment'
166
203
  task :production do
167
- deployment = Paratrooper::Deploy.new("amazing-production-app",
168
- tag: 'production',
169
- match_tag_to: 'staging',
170
- notifiers: [
171
- Paratrooper::Notifiers::ScreenNotifier.new,
172
- Paratrooper::Newrelic::Notifier.new('api_key', 'account_id', 'application_id')
173
- ]
174
- )
204
+ deployment = Paratrooper::Deploy.new("amazing-production-app") do |deploy|
205
+ deploy.tag = 'production'
206
+ deploy.match_tag = 'staging'
207
+ deploy.add_callback(:before_setup) do
208
+ system %Q[curl https://rpm.newrelic.com/accounts/ACCOUNT_ID/applications/APPLICATION_ID/ping_targets/disable -X POST -H "X-Api-Key: API_KEY"]
209
+ end
210
+ deploy.add_callback(:after_teardown) do
211
+ system %Q[curl https://rpm.newrelic.com/accounts/ACCOUNT_ID/applications/APPLICATION_ID/ping_targets/enable -X POST -H "X-Api-Key: API_KEY"]
212
+ end
213
+ end
214
+
215
+ deployment.deploy
175
216
  end
176
217
  end
177
218
  ```
178
219
 
179
- * The `ScreenNotifier` is added by default so when you override the `notifiers`
180
- option you need to manually add it to continue receiving screen output.
181
-
182
- To make your own notifier, take a look at [`Paratrooper::Notifier`][] to see
183
- what methods are available for override.
184
-
185
-
186
220
  ## Contributing
187
221
 
188
222
  1. Fork it
data/Rakefile CHANGED
@@ -1,6 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
2
  require 'rspec/core/rake_task'
3
3
 
4
- RSpec::Core::RakeTask.new(:spec)
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.rspec_opts ||= []
6
+ t.rspec_opts << '--format progress'
7
+ end
5
8
 
6
9
  task :default => :spec
@@ -0,0 +1,21 @@
1
+ module Paratrooper
2
+ module Callbacks
3
+ def callback(name, &block)
4
+ execute_callback("before_#{name}".to_sym)
5
+ block.call if block_given?
6
+ execute_callback("after_#{name}".to_sym)
7
+ end
8
+
9
+ def execute_callback(name)
10
+ callbacks[name].each(&:call)
11
+ end
12
+
13
+ def add_callback(name, &block)
14
+ callbacks[name] << block
15
+ end
16
+
17
+ def callbacks
18
+ @callbacks ||= Hash.new { |hash, key| hash[key] = [] }
19
+ end
20
+ end
21
+ end
@@ -2,83 +2,109 @@ require 'paratrooper/heroku_wrapper'
2
2
  require 'paratrooper/system_caller'
3
3
  require 'paratrooper/notifiers/screen_notifier'
4
4
  require 'paratrooper/pending_migration_check'
5
+ require 'paratrooper/callbacks'
5
6
 
6
7
  module Paratrooper
7
8
 
8
9
  # Public: Entry point into the library.
9
10
  #
10
11
  class Deploy
11
- attr_reader :app_name, :notifiers, :system_caller, :heroku, :tag_name,
12
- :match_tag, :protocol, :deployment_host, :migration_check, :debug
12
+ include Callbacks
13
+
14
+ attr_accessor :app_name, :notifiers, :system_caller, :heroku, :tag_name,
15
+ :match_tag_name, :protocol, :deployment_host, :migration_check, :debug,
16
+ :maintenance_mode
17
+
18
+ alias_method :tag=, :tag_name=
19
+ alias_method :match_tag=, :match_tag_name=
13
20
 
14
21
  # Public: Initializes a Deploy
15
22
  #
16
23
  # app_name - A String naming the Heroku application to be interacted with.
17
24
  # options - The Hash options is used to provide additional functionality.
18
- # :notifiers - Array of objects interested in being
19
- # notified of steps in deployment process
20
- # (optional).
21
- # :heroku - Object wrapper around heroku-api (optional).
22
- # :tag - String name to be used as a git reference
23
- # point (optional).
24
- # :match_tag_to - String name of git reference point to match
25
- # :tag to (optional).
26
- # :system_caller - Object responsible for calling system
27
- # commands (optional).
28
- # :protocol - String web protocol to be used when pinging
29
- # application (optional, default: 'http').
30
- # :deployment_host - String host name to be used in git URL
31
- # (optional, default: 'heroku.com').
32
- # :migration_check - Object responsible for checking pending
33
- # migrations (optional).
34
- def initialize(app_name, options = {})
35
- @app_name = app_name
36
- @notifiers = options[:notifiers] || [Notifiers::ScreenNotifier.new]
37
- @heroku = options[:heroku] || HerokuWrapper.new(app_name, options)
38
- @tag_name = options[:tag]
39
- @match_tag = options[:match_tag_to] || 'master'
40
- @system_caller = options[:system_caller] || SystemCaller.new(debug)
41
- @protocol = options[:protocol] || 'http'
42
- @deployment_host = options[:deployment_host] || 'heroku.com'
43
- @debug = options[:debug] || false
25
+ # :notifiers - Array of objects interested in being
26
+ # notified of steps in deployment process
27
+ # (optional).
28
+ # :heroku - Object wrapper around heroku-api (optional).
29
+ # :tag - String name to be used as a git reference
30
+ # point (optional).
31
+ # :match_tag_to - String name of git reference point to match
32
+ # :tag to (optional).
33
+ # :system_caller - Object responsible for calling system
34
+ # commands (optional).
35
+ # :protocol - String web protocol to be used when pinging
36
+ # application (optional, default: 'http').
37
+ # :deployment_host - String host name to be used in git URL
38
+ # (optional, default: 'heroku.com').
39
+ # :migration_check - Object responsible for checking pending
40
+ # migrations (optional).
41
+ # :maintenance_mode - Boolean whether to trigger maintenance
42
+ # mode on and off during deployment
43
+ # (default: true)
44
+ # :api_key - String version of heroku api key.
45
+ # (default: looks in local Netrc file)
46
+ def initialize(app_name, options = {}, &block)
47
+ @app_name = app_name
48
+ @notifiers = options[:notifiers] || [Notifiers::ScreenNotifier.new]
49
+ @heroku = options[:heroku] || HerokuWrapper.new(app_name, options)
50
+ @tag_name = options[:tag]
51
+ @match_tag_name = options[:match_tag] || 'master'
52
+ @system_caller = options[:system_caller] || SystemCaller.new(debug)
53
+ @protocol = options[:protocol] || 'http'
54
+ @deployment_host = options[:deployment_host] || 'heroku.com'
55
+ @debug = options[:debug] || false
56
+ @maintenance_mode = options.fetch(:maintenance_mode, true)
44
57
  self.migration_check = options[:migration_check]
58
+ block.call(self) if block_given?
45
59
  end
46
60
 
47
- def setup
48
- notify(:setup)
61
+ def notify(step, options = {})
62
+ notifiers.each do |notifier|
63
+ notifier.notify(step, default_payload.merge(options))
64
+ end
49
65
  end
50
66
 
51
- def teardown
52
- notify(:teardown)
67
+ def setup
68
+ callback(:setup) do
69
+ notify(:setup)
70
+ end
53
71
  end
54
72
 
55
- def notify(step, options={})
56
- notifiers.each do |notifier|
57
- notifier.notify(step, default_payload.merge(options))
73
+ def teardown
74
+ callback(:teardown) do
75
+ notify(:teardown)
58
76
  end
59
77
  end
60
78
 
61
79
  # Public: Activates Heroku maintenance mode.
62
80
  #
63
81
  def activate_maintenance_mode
64
- notify(:activate_maintenance_mode)
65
- heroku.app_maintenance_on
82
+ return unless maintenance_mode?
83
+ callback(:activate_maintenance_mode) do
84
+ notify(:activate_maintenance_mode)
85
+ heroku.app_maintenance_on
86
+ end
66
87
  end
67
88
 
68
89
  # Public: Deactivates Heroku maintenance mode.
69
90
  #
70
91
  def deactivate_maintenance_mode
71
- notify(:deactivate_maintenance_mode)
72
- heroku.app_maintenance_off
92
+ return unless maintenance_mode?
93
+ callback(:deactivate_maintenance_mode) do
94
+ notify(:deactivate_maintenance_mode)
95
+ heroku.app_maintenance_off
96
+ end
73
97
  end
74
98
 
75
99
  # Public: Creates a git tag and pushes it to repository.
76
100
  #
77
101
  def update_repo_tag
78
102
  unless tag_name.nil? || tag_name.empty?
79
- notify(:update_repo_tag)
80
- system_call "git tag #{tag_name} #{match_tag} -f"
81
- system_call "git push -f origin #{tag_name}"
103
+ callback(:update_repo_tag) do
104
+ notify(:update_repo_tag)
105
+ system_call "git tag #{tag_name} #{match_tag_name} -f"
106
+ system_call "git push -f origin #{tag_name}"
107
+ end
82
108
  end
83
109
  end
84
110
 
@@ -86,31 +112,39 @@ module Paratrooper
86
112
  #
87
113
  def push_repo
88
114
  reference_point = tag_name || 'master'
89
- notify(:push_repo, reference_point: reference_point)
90
- system_call "git push -f #{deployment_remote} #{reference_point}:refs/heads/master"
115
+ callback(:push_repo) do
116
+ notify(:push_repo, reference_point: reference_point)
117
+ system_call "git push -f #{deployment_remote} #{reference_point}:refs/heads/master"
118
+ end
91
119
  end
92
120
 
93
121
  # Public: Runs rails database migrations on your application.
94
122
  #
95
123
  def run_migrations
96
124
  return unless pending_migrations?
97
- notify(:run_migrations)
98
- heroku.run_migrations
125
+ callback(:run_migrations) do
126
+ notify(:run_migrations)
127
+ heroku.run_migrations
128
+ end
99
129
  end
100
130
 
101
131
  # Public: Restarts application on Heroku.
102
132
  #
103
133
  def app_restart
104
- notify(:app_restart)
105
- heroku.app_restart
134
+ callback(:app_restart) do
135
+ notify(:app_restart)
136
+ heroku.app_restart
137
+ end
106
138
  end
107
139
 
108
140
  # Public: cURL for application URL to start your Heroku dyno.
109
141
  #
110
142
  def warm_instance(wait_time = 3)
111
- sleep wait_time
112
- notify(:warm_instance)
113
- system_call "curl -Il #{protocol}://#{app_url}"
143
+ callback(:warm_instance) do
144
+ notify(:warm_instance)
145
+ sleep wait_time
146
+ system_call "curl -Il #{protocol}://#{app_url}"
147
+ end
114
148
  end
115
149
 
116
150
  # Public: Execute common deploy steps.
@@ -138,6 +172,10 @@ module Paratrooper
138
172
  end
139
173
  alias_method :deploy, :default_deploy
140
174
 
175
+ def maintenance_mode?
176
+ !!@maintenance_mode
177
+ end
178
+
141
179
  private
142
180
  def app_url
143
181
  heroku.app_url
@@ -149,7 +187,7 @@ module Paratrooper
149
187
  app_url: app_url,
150
188
  deployment_remote: deployment_remote,
151
189
  tag_name: tag_name,
152
- match_tag: match_tag
190
+ match_tag: match_tag_name
153
191
  }
154
192
  end
155
193
 
@@ -166,7 +204,7 @@ module Paratrooper
166
204
  end
167
205
 
168
206
  def migration_check=(obj)
169
- @migration_check = obj || PendingMigrationCheck.new(match_tag, heroku, system_caller)
207
+ @migration_check = obj || PendingMigrationCheck.new(match_tag_name, heroku, system_caller)
170
208
  @migration_check.last_deployed_commit
171
209
  @migration_check
172
210
  end
@@ -1,3 +1,3 @@
1
1
  module Paratrooper
2
- VERSION = "1.4.2"
2
+ VERSION = "2.0.0.beta1"
3
3
  end
@@ -11,7 +11,8 @@ describe Paratrooper::Deploy do
11
11
  heroku: heroku,
12
12
  notifiers: [],
13
13
  system_caller: system_caller,
14
- migration_check: migration_check
14
+ migration_check: migration_check,
15
+ maintenance_mode: true
15
16
  }
16
17
  end
17
18
  let(:options) { Hash.new }
@@ -32,6 +33,39 @@ describe Paratrooper::Deploy do
32
33
  double(:domain_response, body: [{'domain' => 'application_url'}])
33
34
  end
34
35
 
36
+ describe "tag=" do
37
+ specify "tag is set and @tag_name holds value" do
38
+ deployer.tag = "tag_name"
39
+ expect(deployer.tag_name).to eq("tag_name")
40
+ end
41
+ end
42
+
43
+ describe "match_tag_to=" do
44
+ specify "match_tag is set and @match_tag_name holds value" do
45
+ deployer.match_tag = "staging"
46
+ expect(deployer.match_tag_name).to eq("staging")
47
+ end
48
+ end
49
+
50
+ describe "passing a block to initialize" do
51
+ it "sets attributes on self" do
52
+ deployer = described_class.new(app_name, default_options) do |p|
53
+ p.match_tag = "staging"
54
+ p.tag = "production"
55
+ p.debug = true
56
+ p.maintenance_mode = true
57
+ p.deployment_host = "HOST"
58
+ p.protocol = "MOM"
59
+ end
60
+ expect(deployer.match_tag_name).to eq("staging")
61
+ expect(deployer.tag_name).to eq("production")
62
+ expect(deployer.debug).to be_true
63
+ expect(deployer.maintenance_mode).to be_true
64
+ expect(deployer.deployment_host).to eq("HOST")
65
+ expect(deployer.protocol).to eq("MOM")
66
+ end
67
+ end
68
+
35
69
  describe "options" do
36
70
  context "accepts :tag" do
37
71
  let(:options) { { tag: 'tag_name' } }
@@ -59,6 +93,15 @@ describe Paratrooper::Deploy do
59
93
  end
60
94
  end
61
95
 
96
+ context "accepts :maintenance_mode" do
97
+ let(:options) { { maintenance_mode: false } }
98
+ let(:notifiers) { double(:notifier) }
99
+
100
+ it "and responds to #notifiers" do
101
+ expect(deployer.maintenance_mode?).to eq(false)
102
+ end
103
+ end
104
+
62
105
  describe "protocol" do
63
106
  context "accepts :protocol" do
64
107
  let(:options) { { protocol: 'https' } }
@@ -85,26 +128,62 @@ describe Paratrooper::Deploy do
85
128
  end
86
129
 
87
130
  describe "#activate_maintenance_mode" do
88
- it 'sends notification' do
89
- deployer.should_receive(:notify).with(:activate_maintenance_mode).once
90
- deployer.activate_maintenance_mode
131
+ context "when maintenance_mode option is 'true'" do
132
+ let(:options) { { maintenance_mode: true } }
133
+
134
+ it 'sends notification' do
135
+ deployer.should_receive(:notify).with(:activate_maintenance_mode).once
136
+ deployer.activate_maintenance_mode
137
+ end
138
+
139
+ it "makes call to heroku to turn on maintenance mode" do
140
+ heroku.should_receive(:app_maintenance_on)
141
+ deployer.activate_maintenance_mode
142
+ end
91
143
  end
92
144
 
93
- it "makes call to heroku to turn on maintenance mode" do
94
- heroku.should_receive(:app_maintenance_on)
95
- deployer.activate_maintenance_mode
145
+ context "when maintenance_mode option is 'false'" do
146
+ let(:options) { { maintenance_mode: false } }
147
+
148
+ it 'does not send notification' do
149
+ deployer.should_not_receive(:notify).with(:activate_maintenance_mode)
150
+ deployer.activate_maintenance_mode
151
+ end
152
+
153
+ it "does not make a call to heroku to turn on maintenance mode" do
154
+ heroku.should_not_receive(:app_maintenance_on)
155
+ deployer.activate_maintenance_mode
156
+ end
96
157
  end
97
158
  end
98
159
 
99
160
  describe "#deactivate_maintenance_mode" do
100
- it 'sends notification' do
101
- deployer.should_receive(:notify).with(:deactivate_maintenance_mode).once
102
- deployer.deactivate_maintenance_mode
161
+ context "when maintenance_mode option is 'true'" do
162
+ let(:options) { { maintenance_mode: true } }
163
+
164
+ it 'sends notification' do
165
+ deployer.should_receive(:notify).with(:deactivate_maintenance_mode).once
166
+ deployer.deactivate_maintenance_mode
167
+ end
168
+
169
+ it "makes call to heroku to turn on maintenance mode" do
170
+ heroku.should_receive(:app_maintenance_off)
171
+ deployer.deactivate_maintenance_mode
172
+ end
103
173
  end
104
174
 
105
- it "makes call to heroku to turn on maintenance mode" do
106
- heroku.should_receive(:app_maintenance_off)
107
- deployer.deactivate_maintenance_mode
175
+ context "when maintenance_mode option is 'false'" do
176
+ let(:options) { { maintenance_mode: false } }
177
+
178
+ it 'does not send notification' do
179
+ deployer.should_not_receive(:notify).with(:deactivate_maintenance_mode)
180
+ deployer.deactivate_maintenance_mode
181
+ end
182
+
183
+ it "does not make a call to heroku to turn on maintenance mode" do
184
+ heroku.should_not_receive(:app_maintenance_off)
185
+ deployer.deactivate_maintenance_mode
186
+ end
108
187
  end
109
188
  end
110
189
 
@@ -123,7 +202,7 @@ describe Paratrooper::Deploy do
123
202
 
124
203
  context "when deploy_tag is available" do
125
204
  before do
126
- options.merge!(match_tag_to: 'deploy_this')
205
+ options.merge!(match_tag: 'deploy_this')
127
206
  end
128
207
 
129
208
  it 'creates a git tag at deploy_tag reference point' do
@@ -244,5 +323,24 @@ describe Paratrooper::Deploy do
244
323
  deployer.warm_instance(0)
245
324
  end
246
325
  end
326
+
327
+ describe "adding notification" do
328
+ after do
329
+ FileUtils.rm("spec/fixtures/test.txt")
330
+ end
331
+
332
+ it "adds notifier to #notifiers collection" do
333
+ callback = proc do
334
+ system("touch spec/fixtures/test.txt")
335
+ end
336
+
337
+ deployer = described_class.new(app_name, default_options) do |p|
338
+ p.add_callback(:before_setup, &callback)
339
+ end
340
+ deployer.setup
341
+
342
+ expect(deployer.callbacks[:before_setup]).to eq([callback])
343
+ end
344
+ end
247
345
  end
248
346
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paratrooper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 2.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Polito
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-17 00:00:00.000000000 Z
12
+ date: 2013-09-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -105,14 +105,15 @@ extra_rdoc_files: []
105
105
  files:
106
106
  - .bundle/config
107
107
  - .gitignore
108
+ - .rspec
108
109
  - .ruby-version
109
110
  - CHANGELOG.md
110
111
  - Gemfile
111
- - Gemfile.lock
112
112
  - LICENSE.txt
113
113
  - README.md
114
114
  - Rakefile
115
115
  - lib/paratrooper.rb
116
+ - lib/paratrooper/callbacks.rb
116
117
  - lib/paratrooper/deploy.rb
117
118
  - lib/paratrooper/heroku_wrapper.rb
118
119
  - lib/paratrooper/local_api_key_extractor.rb
@@ -144,9 +145,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
145
  version: '0'
145
146
  required_rubygems_version: !ruby/object:Gem::Requirement
146
147
  requirements:
147
- - - '>='
148
+ - - '>'
148
149
  - !ruby/object:Gem::Version
149
- version: '0'
150
+ version: 1.3.1
150
151
  requirements: []
151
152
  rubyforge_project:
152
153
  rubygems_version: 2.0.3
data/Gemfile.lock DELETED
@@ -1,42 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- paratrooper (1.4.2)
5
- heroku-api (~> 0.3)
6
- netrc (~> 0.7)
7
- rendezvous (~> 0.0.1)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- coderay (1.0.8)
13
- diff-lcs (1.1.3)
14
- excon (0.22.1)
15
- heroku-api (0.3.11)
16
- excon (~> 0.22.1)
17
- method_source (0.8.1)
18
- netrc (0.7.7)
19
- pry (0.9.10)
20
- coderay (~> 1.0.5)
21
- method_source (~> 0.8)
22
- slop (~> 3.3.1)
23
- rake (10.0.3)
24
- rendezvous (0.0.2)
25
- rspec (2.12.0)
26
- rspec-core (~> 2.12.0)
27
- rspec-expectations (~> 2.12.0)
28
- rspec-mocks (~> 2.12.0)
29
- rspec-core (2.12.2)
30
- rspec-expectations (2.12.1)
31
- diff-lcs (~> 1.1.3)
32
- rspec-mocks (2.12.1)
33
- slop (3.3.3)
34
-
35
- PLATFORMS
36
- ruby
37
-
38
- DEPENDENCIES
39
- paratrooper!
40
- pry
41
- rake
42
- rspec (~> 2.12)