heroku_san 4.2.5 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ heroku_san
@@ -0,0 +1 @@
1
+ ruby-1.9.3-p327
@@ -1,5 +1,10 @@
1
1
  # Change Log (curated)
2
2
 
3
+ ## v4.3.0
4
+
5
+ * Add #ensure_{all|one}_worker(s)_running -- which will restart your web workers until they stay up
6
+ * Closes #137
7
+
3
8
  ## v4.2.0
4
9
 
5
10
  * Wrap API calls so that errors are reported in a more human-fiendly way
data/Gemfile CHANGED
@@ -1,4 +1,23 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify dependencies in heroku_san.gemspec
4
- gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem 'rails', '>= 2'
8
+ gem 'rspec'
9
+ gem 'aruba'
10
+ gem 'cucumber'
11
+ gem 'rake'
12
+ gem 'bundler', '~> 1.1'
13
+ gem 'git-smart'
14
+ gem 'godot'
15
+ gem 'guard'
16
+ gem 'rb-inotify', :require => false
17
+ gem 'rb-fsevent', :require => false
18
+ gem 'rb-fchange', :require => false
19
+ gem 'terminal-notifier-guard'
20
+ gem 'guard-rspec'
21
+ gem 'guard-bundler'
22
+ gem 'guard-cucumber'
23
+ end
@@ -0,0 +1,21 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'bundler' do
5
+ watch('Gemfile')
6
+ watch(/^.+\.gemspec/)
7
+ end
8
+
9
+ guard 'rspec' do
10
+ watch(%r{^spec/.+_spec\.rb$})
11
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
12
+ watch('spec/spec_helper.rb') { "spec" }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch(%r{^spec/fixtures/(.+)\.yml$}) { "spec" }
15
+ end
16
+
17
+ guard 'cucumber', :cli => '--tags ~@slow_process --format progress' do
18
+ watch(%r{^features/.+\.feature$})
19
+ watch(%r{^features/support/.+$}) { 'features' }
20
+ watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
21
+ end
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  Helpful rake tasks for Heroku.
3
3
 
4
4
  [![Build Status](https://secure.travis-ci.org/fastestforward/heroku_san.png)](http://travis-ci.org/fastestforward/heroku_san)
5
- [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/fastestforward/heroku_san)
5
+ [![Code Climate](https://codeclimate.com/github/fastestforward/heroku_san.png)](https://codeclimate.com/github/fastestforward/heroku_san)
6
6
 
7
7
  ## Install
8
8
 
@@ -1,7 +1,7 @@
1
1
  Feature: Command Line
2
2
 
3
3
  Background:
4
- Given I run `rails new heroku_san_test --quiet --force --database=postgresql --skip-bundle --skip-javascript --skip-test-unit --skip-sprockets`
4
+ Given I run `rails new heroku_san_test --quiet --force --skip-active-record --skip-bundle --skip-javascript --skip-test-unit --skip-sprockets`
5
5
  And I cd to "heroku_san_test"
6
6
  And I overwrite "Gemfile" with:
7
7
  """
@@ -15,7 +15,7 @@ Feature: heroku_san can control a project on Heroku
15
15
  Given I have a new Rails project
16
16
  When I am in the project directory
17
17
  And I commit any changes with "Initial commit"
18
- And I add heroku_san to the Gemfile
18
+ And I add heroku_san to the rails Gemfile
19
19
  And I run bundle install
20
20
  And I generate a new config file
21
21
  And I create my project on Heroku
@@ -35,7 +35,7 @@ Feature: heroku_san can control a project on Heroku
35
35
  Given I have a new Sinatra project
36
36
  When I am in the project directory
37
37
  And I commit any changes with "Initial commit"
38
- And I add heroku_san to the Gemfile
38
+ And I add heroku_san to the sinatra Gemfile
39
39
  And I run bundle install
40
40
  And I create a new config/heroku.yml file
41
41
  And I create my project on Heroku
@@ -3,7 +3,7 @@ require 'active_support/core_ext/string/strip'
3
3
  require 'godot'
4
4
 
5
5
  Given /^I have a new Rails project$/ do
6
- cmd = "rails new test_app --quiet --force --database=postgresql --skip-bundle --skip-javascript --skip-test-unit --skip-sprockets"
6
+ cmd = "rails new test_app --quiet --force --skip-bundle --skip-javascript --skip-test-unit --skip-sprockets"
7
7
  run_clean unescape(cmd)
8
8
  end
9
9
 
@@ -51,8 +51,24 @@ When /^I tag the commit with "([^"]*)" annotated by "([^"]*)"$/ do |tag, annotat
51
51
  run_clean "git tag -a '#{tag}' -m '#{annotation}' HEAD"
52
52
  end
53
53
 
54
- When /^I add heroku_san to the Gemfile$/ do
55
- append_to_file 'Gemfile', <<EOT.strip_heredoc
54
+ When /^I add heroku_san to the rails Gemfile$/ do
55
+ overwrite_file 'Gemfile', <<EOT.strip_heredoc
56
+ source 'https://rubygems.org'
57
+ ruby '1.9.3'
58
+ gem 'rails', '3.2.7'
59
+ gem 'pg'
60
+ group :development, :test do
61
+ gem 'heroku_san', :path => '../../../.'
62
+ gem 'sqlite3'
63
+ end
64
+ EOT
65
+ end
66
+
67
+ When /^I add heroku_san to the sinatra Gemfile$/ do
68
+ overwrite_file 'Gemfile', <<EOT.strip_heredoc
69
+ source 'https://rubygems.org'
70
+ ruby '1.9.3'
71
+ gem 'sinatra'
56
72
  group :development, :test do
57
73
  gem 'heroku_san', :path => '../../../.'
58
74
  end
@@ -142,7 +158,7 @@ When /^I restart my project$/ do
142
158
  end
143
159
 
144
160
  When /^I generate a scaffold$/ do
145
- run_clean 'rails generate scaffold droid'
161
+ run_clean 'rails generate resource droid'
146
162
  append_to_file 'app/views/droids/index.html.erb', %Q{\n<div><code><%= ENV['DROIDS'] -%></code></div>\n}
147
163
  end
148
164
 
@@ -181,15 +197,13 @@ When /^I install an addon$/ do
181
197
  test_app:
182
198
  app: #{@app}
183
199
  addons:
184
- - deployhooks:campfire
200
+ - scheduler:standard
185
201
 
186
202
  END_CONFIG
187
203
 
188
204
  output = run_clean 'rake test_app heroku:addons'
189
205
  # The output should show the new one ...
190
- assert_partial_output "deployhooks:campfire", output
191
- # ... with a note about needing to configure it.
192
- assert_partial_output "https://api.heroku.com/myapps/#{@app}/addons/deployhooks:campfire", output
206
+ assert_partial_output "scheduler:standard", output
193
207
  end
194
208
 
195
209
  Then /^(?:heroku_san|issue \d+) (?:is green|has been fixed)$/ do
@@ -204,6 +218,7 @@ def vladimir
204
218
  @vladimir ||= begin
205
219
  Godot.new("#{@app}.herokuapp.com", 80).tap do |vladimir|
206
220
  vladimir.timeout = 60
221
+ vladimir.interval = 5
207
222
  end
208
223
  end
209
224
  end
@@ -29,14 +29,6 @@ Gem::Specification.new do |s|
29
29
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
30
30
  s.add_runtime_dependency(%q<heroku-api>, ['>= 0.1.2'])
31
31
  s.add_runtime_dependency(%q<rake>)
32
- s.add_development_dependency(%q<rails>, ['>= 2'])
33
- s.add_development_dependency(%q<rspec>)
34
- s.add_development_dependency(%q<aruba>)
35
- s.add_development_dependency(%q<cucumber>)
36
- s.add_development_dependency(%q<rake>)
37
- s.add_development_dependency(%q<bundler>, ['~> 1.1 '])
38
- s.add_development_dependency('git-smart')
39
- s.add_development_dependency('godot')
40
32
  else
41
33
  s.add_dependency(%q<rails>, ['>= 2'])
42
34
  s.add_dependency(%q<heroku-api>, ['>= 0.1.2'])
@@ -1,3 +1,5 @@
1
+ require 'time'
2
+
1
3
  module HerokuSan
2
4
  class API
3
5
  def initialize(options = {})
@@ -0,0 +1,36 @@
1
+ require 'heroku-api'
2
+
3
+ module HerokuSan
4
+ module Application
5
+ def ensure_one_worker_running(at_least = 1)
6
+ begin
7
+ web_processes = heroku.get_ps(app).body.select { |p| p["process"] =~ /web\./ }
8
+ end until restart_processes(web_processes) >= at_least
9
+ end
10
+
11
+ def ensure_all_workers_running
12
+ while true do
13
+ processes = heroku.get_ps(app).body
14
+
15
+ return if processes.all? { |p| p["state"] == "up" }
16
+
17
+ restart_processes(processes)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def restart_processes(web_processes)
24
+ up = 0
25
+ web_processes.each do |process|
26
+ case process["state"]
27
+ when "up"
28
+ up += 1
29
+ when "crashed"
30
+ heroku.post_ps_restart(app, ps: process["process"])
31
+ end
32
+ end
33
+ up
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,5 @@
1
+ require 'yaml'
2
+
1
3
  module HerokuSan
2
4
  class Parser
3
5
  include HerokuSan::Git
@@ -5,8 +7,8 @@ module HerokuSan
5
7
  def parse(parseable)
6
8
  @settings = parse_yaml(parseable.config_file)
7
9
  convert_from_heroku_san_format
8
- each_setting_has_a_config_section
9
10
  parseable.external_configuration = @settings.delete 'config_repo'
11
+ each_setting_has_a_config_section
10
12
  parseable.configuration = @settings
11
13
 
12
14
  end
@@ -1,5 +1,6 @@
1
1
  require 'heroku-api'
2
2
  require 'json'
3
+ require_relative 'application'
3
4
 
4
5
  MOCK = false unless defined?(MOCK)
5
6
 
@@ -8,6 +9,7 @@ module HerokuSan
8
9
  include HerokuSan::Git
9
10
  attr_reader :name
10
11
  attr_reader :options
12
+ include HerokuSan::Application
11
13
 
12
14
  def initialize(stage, options = {})
13
15
  @name = stage
@@ -1,3 +1,3 @@
1
1
  module HerokuSan
2
- VERSION = "4.2.5"
2
+ VERSION = "4.3.0"
3
3
  end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  # https://github.com/fastestforward/heroku_san/issues/105
4
+ module HerokuSan
4
5
  describe HerokuSan::API do
5
6
  subject(:api) { HerokuSan::API.new(:api_key => 'key', :mock => true)}
6
7
  it "is a proxy to the Heroku::API" do
@@ -23,3 +24,4 @@ describe HerokuSan::API do
23
24
  }
24
25
  end
25
26
  end
27
+ end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ module HerokuSan
4
+ describe HerokuSan::Application do
5
+ let(:stage) { HerokuSan::Stage.new('production', {"deploy" => HerokuSan::Deploy::Rails, "app" => "awesomeapp", "stack" => "cedar"}) }
6
+ let(:response) { stub }
7
+
8
+ before do
9
+ stage.heroku.stub(:get_ps).with(stage.app) { response }
10
+ end
11
+
12
+ describe "#ensure_one_worker_running" do
13
+ # API: {"action" => "up", "app_name" => "awesomeapp", "attached" => false, "command" => "thin -p $PORT -e $RACK_ENV -R $HEROKU_RACK start", "elapsed" => 0, "pretty_state" => "created for 0s", "process" => "web.1", "rendezvous_url" => nil, "slug" => "NONE", "state" => "created", "transitioned_at" => "2013/07/28 15:04:24 -0700", "type" => "Dyno", "upid" => "56003928"}
14
+ let(:none_running) do
15
+ [
16
+ {"process" => "worker.1", "state" => "up"},
17
+ {"process" => "web.1", "state" => "starting"},
18
+ {"process" => "web.2", "state" => "starting"}
19
+ ]
20
+ end
21
+ let(:one_running_with_crash) do
22
+ [
23
+ {"process" => "worker.1", "state" => "up"},
24
+ {"process" => "web.1", "state" => "crashed"},
25
+ {"process" => "web.2", "state" => "up"}
26
+ ]
27
+ end
28
+
29
+ it "should block until at least one worker is running, and restart any crashed workers it sees" do
30
+
31
+ with_app(stage, 'name' => stage.app) do |app_data|
32
+ response.should_receive(:body).twice.and_return(none_running, one_running_with_crash)
33
+ stage.heroku.should_receive(:post_ps_restart).with(stage.app, ps: 'web.1')
34
+
35
+ stage.ensure_one_worker_running
36
+ end
37
+ end
38
+ end
39
+
40
+ describe "#ensure_all_workers_running" do
41
+ let(:some_crashes) do
42
+ [
43
+ {"process" => "worker.1", "state" => "crashed"},
44
+ {"process" => "web.1", "state" => "crashed"},
45
+ {"process" => "web.2", "state" => "starting"}
46
+ ]
47
+ end
48
+ let(:some_restarting) do
49
+ [
50
+ {"process" => "worker.1", "state" => "restarting"},
51
+ {"process" => "web.1", "state" => "restarting"},
52
+ {"process" => "web.2", "state" => "up"}
53
+ ]
54
+ end
55
+ let(:one_crash) do
56
+ [
57
+ {"process" => "worker.1", "state" => "crashed"},
58
+ {"process" => "web.1", "state" => "up"},
59
+ {"process" => "web.2", "state" => "up"}
60
+ ]
61
+ end
62
+ let(:all_up) do
63
+ [
64
+ {"process" => "worker.1", "state" => "up"},
65
+ {"process" => "web.1", "state" => "up"},
66
+ {"process" => "web.2", "state" => "up"}
67
+ ]
68
+ end
69
+
70
+ it "should block until all workers are running, and restart any crashed workers it sees" do
71
+ with_app(stage, 'name' => stage.app) do |app_data|
72
+ response.should_receive(:body).exactly(4).times.and_return(some_crashes, some_restarting, one_crash, all_up)
73
+ stage.heroku.should_receive(:post_ps_restart).with(stage.app, ps: 'worker.1').twice
74
+ stage.heroku.should_receive(:post_ps_restart).with(stage.app, ps: 'web.1').once
75
+
76
+ stage.ensure_all_workers_running
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
+ module HerokuSan
3
4
  describe HerokuSan::Configuration do
4
5
  let(:configurable) { Configurable.new }
5
6
  let(:configuration) { HerokuSan::Configuration.new(configurable) }
@@ -38,4 +39,5 @@ describe HerokuSan::Configuration do
38
39
  end
39
40
  end
40
41
  end
41
- end
42
+ end
43
+ end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
+ module HerokuSan
3
4
  describe HerokuSan::Parser do
4
5
  let(:parser) { subject }
5
6
 
@@ -86,3 +87,4 @@ describe HerokuSan::Parser do
86
87
  end
87
88
  end
88
89
  end
90
+ end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'tmpdir'
3
3
 
4
+ module HerokuSan
4
5
  describe HerokuSan::Project do
5
6
  let(:heroku_san) { HerokuSan::Project.new }
6
7
  subject { heroku_san }
@@ -82,3 +83,4 @@ describe HerokuSan::Project do
82
83
  end
83
84
  end
84
85
  end
86
+ end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
+ module HerokuSan
3
4
  describe HerokuSan::Stage do
4
5
  include HerokuSan::Git
5
6
  subject { HerokuSan::Stage.new('production', {"deploy" => HerokuSan::Deploy::Rails, "app" => "awesomeapp", "stack" => "cedar"})}
@@ -282,3 +283,4 @@ describe HerokuSan::Stage do
282
283
  end
283
284
  end
284
285
  end
286
+ end
@@ -10,13 +10,6 @@ MOCK = ENV['MOCK'] != 'false'
10
10
  Dir[File.join(SPEC_ROOT, "support/**/*.rb")].each {|f| require f}
11
11
 
12
12
  RSpec.configure do |config|
13
- # == Mock Framework
14
- #
15
- # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
16
- #
17
- # config.mock_with :mocha
18
- # config.mock_with :flexmock
19
- # config.mock_with :rr
20
13
  config.mock_with :rspec
21
14
  end
22
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroku_san
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.5
4
+ version: 4.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-02-12 00:00:00.000000000 Z
15
+ date: 2013-07-29 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: heroku-api
@@ -46,134 +46,6 @@ dependencies:
46
46
  - - ! '>='
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
- - !ruby/object:Gem::Dependency
50
- name: rails
51
- requirement: !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
56
- version: '2'
57
- type: :development
58
- prerelease: false
59
- version_requirements: !ruby/object:Gem::Requirement
60
- none: false
61
- requirements:
62
- - - ! '>='
63
- - !ruby/object:Gem::Version
64
- version: '2'
65
- - !ruby/object:Gem::Dependency
66
- name: rspec
67
- requirement: !ruby/object:Gem::Requirement
68
- none: false
69
- requirements:
70
- - - ! '>='
71
- - !ruby/object:Gem::Version
72
- version: '0'
73
- type: :development
74
- prerelease: false
75
- version_requirements: !ruby/object:Gem::Requirement
76
- none: false
77
- requirements:
78
- - - ! '>='
79
- - !ruby/object:Gem::Version
80
- version: '0'
81
- - !ruby/object:Gem::Dependency
82
- name: aruba
83
- requirement: !ruby/object:Gem::Requirement
84
- none: false
85
- requirements:
86
- - - ! '>='
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- none: false
93
- requirements:
94
- - - ! '>='
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: cucumber
99
- requirement: !ruby/object:Gem::Requirement
100
- none: false
101
- requirements:
102
- - - ! '>='
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- none: false
109
- requirements:
110
- - - ! '>='
111
- - !ruby/object:Gem::Version
112
- version: '0'
113
- - !ruby/object:Gem::Dependency
114
- name: rake
115
- requirement: !ruby/object:Gem::Requirement
116
- none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
120
- version: '0'
121
- type: :development
122
- prerelease: false
123
- version_requirements: !ruby/object:Gem::Requirement
124
- none: false
125
- requirements:
126
- - - ! '>='
127
- - !ruby/object:Gem::Version
128
- version: '0'
129
- - !ruby/object:Gem::Dependency
130
- name: bundler
131
- requirement: !ruby/object:Gem::Requirement
132
- none: false
133
- requirements:
134
- - - ~>
135
- - !ruby/object:Gem::Version
136
- version: '1.1'
137
- type: :development
138
- prerelease: false
139
- version_requirements: !ruby/object:Gem::Requirement
140
- none: false
141
- requirements:
142
- - - ~>
143
- - !ruby/object:Gem::Version
144
- version: '1.1'
145
- - !ruby/object:Gem::Dependency
146
- name: git-smart
147
- requirement: !ruby/object:Gem::Requirement
148
- none: false
149
- requirements:
150
- - - ! '>='
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- type: :development
154
- prerelease: false
155
- version_requirements: !ruby/object:Gem::Requirement
156
- none: false
157
- requirements:
158
- - - ! '>='
159
- - !ruby/object:Gem::Version
160
- version: '0'
161
- - !ruby/object:Gem::Dependency
162
- name: godot
163
- requirement: !ruby/object:Gem::Requirement
164
- none: false
165
- requirements:
166
- - - ! '>='
167
- - !ruby/object:Gem::Version
168
- version: '0'
169
- type: :development
170
- prerelease: false
171
- version_requirements: !ruby/object:Gem::Requirement
172
- none: false
173
- requirements:
174
- - - ! '>='
175
- - !ruby/object:Gem::Version
176
- version: '0'
177
49
  description: Manage multiple Heroku instances/apps for a single Rails app using Rake
178
50
  email: elijah.miller@gmail.com
179
51
  executables: []
@@ -182,9 +54,12 @@ extra_rdoc_files:
182
54
  - README.md
183
55
  files:
184
56
  - .gitignore
57
+ - .ruby-gemset
58
+ - .ruby-version
185
59
  - .travis.yml
186
60
  - CHANGELOG.md
187
61
  - Gemfile
62
+ - Guardfile
188
63
  - LICENSE
189
64
  - README.md
190
65
  - Rakefile
@@ -202,6 +77,7 @@ files:
202
77
  - lib/generators/heroku_san_generator.rb
203
78
  - lib/heroku_san.rb
204
79
  - lib/heroku_san/api.rb
80
+ - lib/heroku_san/application.rb
205
81
  - lib/heroku_san/configuration.rb
206
82
  - lib/heroku_san/deploy/base.rb
207
83
  - lib/heroku_san/deploy/noop.rb
@@ -219,11 +95,12 @@ files:
219
95
  - spec/fixtures/example.yml
220
96
  - spec/fixtures/extended_config.yml
221
97
  - spec/fixtures/old_format.yml
222
- - spec/git_spec.rb
223
98
  - spec/heroku_san/api_spec.rb
99
+ - spec/heroku_san/application_spec.rb
224
100
  - spec/heroku_san/configuration_spec.rb
225
101
  - spec/heroku_san/deploy/base_spec.rb
226
102
  - spec/heroku_san/deploy/rails_spec.rb
103
+ - spec/heroku_san/git_spec.rb
227
104
  - spec/heroku_san/parser_spec.rb
228
105
  - spec/heroku_san/project_spec.rb
229
106
  - spec/heroku_san/stage_spec.rb
@@ -245,7 +122,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
245
122
  version: '0'
246
123
  segments:
247
124
  - 0
248
- hash: 4414701449810336455
125
+ hash: -1774718932546341856
249
126
  required_rubygems_version: !ruby/object:Gem::Requirement
250
127
  none: false
251
128
  requirements:
@@ -254,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
131
  version: '0'
255
132
  requirements: []
256
133
  rubyforge_project:
257
- rubygems_version: 1.8.24
134
+ rubygems_version: 1.8.23
258
135
  signing_key:
259
136
  specification_version: 3
260
137
  summary: ! 'A bunch of useful Rake tasks for managing your Heroku apps. NOTE: The
@@ -269,11 +146,12 @@ test_files:
269
146
  - spec/fixtures/example.yml
270
147
  - spec/fixtures/extended_config.yml
271
148
  - spec/fixtures/old_format.yml
272
- - spec/git_spec.rb
273
149
  - spec/heroku_san/api_spec.rb
150
+ - spec/heroku_san/application_spec.rb
274
151
  - spec/heroku_san/configuration_spec.rb
275
152
  - spec/heroku_san/deploy/base_spec.rb
276
153
  - spec/heroku_san/deploy/rails_spec.rb
154
+ - spec/heroku_san/git_spec.rb
277
155
  - spec/heroku_san/parser_spec.rb
278
156
  - spec/heroku_san/project_spec.rb
279
157
  - spec/heroku_san/stage_spec.rb