samorau 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/bin/samorau +2 -2
- data/lib/heroku/samorau.rb +61 -34
- data/samorau.gemspec +8 -8
- data/test/{delete_check.rb → deprovision_check.rb} +2 -2
- data/test/manifest_check_test.rb +22 -1
- data/test/{create_check_test.rb → provision_check_test.rb} +3 -3
- data/test/{create_response_check_test.rb → provision_response_check_test.rb} +3 -3
- metadata +9 -9
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ begin
|
|
16
16
|
gemspec.add_dependency(%q<term-ansicolor>, ["~> 1.0"])
|
17
17
|
gemspec.add_dependency(%q<launchy>, [">= 0.3.2"])
|
18
18
|
|
19
|
-
gemspec.version = '0.
|
19
|
+
gemspec.version = '0.3.0'
|
20
20
|
end
|
21
21
|
rescue LoadError
|
22
22
|
puts "Jeweler not available. Install it with: gem install jeweler"
|
data/bin/samorau
CHANGED
@@ -84,11 +84,11 @@ when "test"
|
|
84
84
|
run ManifestCheck, fn
|
85
85
|
when "provision"
|
86
86
|
run ManifestCheck, fn
|
87
|
-
run
|
87
|
+
run ProvisionCheck, fn, :async => async, :env => env
|
88
88
|
when "deprovision"
|
89
89
|
id = ARGV.shift || abort("! no id specified; see usage")
|
90
90
|
run ManifestCheck, fn
|
91
|
-
run
|
91
|
+
run DeprovisionCheck, fn, :id => id, :async => async, :env => env
|
92
92
|
when "sso"
|
93
93
|
id = ARGV.shift || abort("! no id specified; see usage")
|
94
94
|
run ManifestCheck, fn
|
data/lib/heroku/samorau.rb
CHANGED
@@ -10,35 +10,43 @@ module Heroku
|
|
10
10
|
module Manifest
|
11
11
|
|
12
12
|
def self.init(filename)
|
13
|
-
|
14
|
-
open(filename, 'w') {|f| f << json }
|
13
|
+
open(filename, 'w') {|f| f << skeleton_str }
|
15
14
|
end
|
16
15
|
|
17
16
|
def self.skeleton
|
18
|
-
|
19
|
-
"name" => "myaddon",
|
20
|
-
|
21
|
-
"api" => {
|
22
|
-
"username" => "heroku",
|
23
|
-
"password" => generate_password,
|
24
|
-
"sso_salt" => generate_password(40),
|
25
|
-
"test" => "http://localhost:4567/",
|
26
|
-
"production" => "https://yourapp.com/",
|
27
|
-
"config_vars" => ["MYADDON_URL"]
|
28
|
-
},
|
29
|
-
|
30
|
-
"plans" => [
|
31
|
-
{
|
32
|
-
"name" => "Basic",
|
33
|
-
"price" => "0",
|
34
|
-
"price_unit" => "month"
|
35
|
-
}
|
36
|
-
]
|
37
|
-
}
|
17
|
+
Yajl::Parser.parse(skeleton_str)
|
38
18
|
end
|
39
19
|
|
20
|
+
def self.skeleton_str
|
21
|
+
return <<EOJSON
|
22
|
+
{
|
23
|
+
"id": "myaddon",
|
24
|
+
"name": "My Addon",
|
25
|
+
"plans": [
|
26
|
+
{
|
27
|
+
"id": "basic",
|
28
|
+
"name": "Basic",
|
29
|
+
"price": "0",
|
30
|
+
"price_unit": "month"
|
31
|
+
}
|
32
|
+
],
|
33
|
+
"api": {
|
34
|
+
"config_vars": [
|
35
|
+
"MYADDON_URL"
|
36
|
+
],
|
37
|
+
"production": "https://yourapp.com/",
|
38
|
+
"test": "http://localhost:4567/",
|
39
|
+
"username": "heroku",
|
40
|
+
"password": "#{generate_password(16)}",
|
41
|
+
"sso_salt": "#{generate_password(16)}"
|
42
|
+
}
|
43
|
+
}
|
44
|
+
EOJSON
|
45
|
+
end
|
46
|
+
|
47
|
+
PasswordChars = chars = ['a'..'z', 'A'..'Z', '0'..'9'].map { |r| r.to_a }.flatten
|
40
48
|
def self.generate_password(size=16)
|
41
|
-
Array.new(size
|
49
|
+
Array.new(size) { PasswordChars[rand(PasswordChars.size)] }.join
|
42
50
|
end
|
43
51
|
|
44
52
|
end
|
@@ -116,6 +124,17 @@ module Heroku
|
|
116
124
|
ValidPriceUnits = %w[month dyno_hour]
|
117
125
|
|
118
126
|
def call!
|
127
|
+
test "manifest id key"
|
128
|
+
check "if exists" do
|
129
|
+
data.has_key?("id")
|
130
|
+
end
|
131
|
+
check "is a string" do
|
132
|
+
data["id"].is_a?(String)
|
133
|
+
end
|
134
|
+
check "is not blank" do
|
135
|
+
!data["id"].empty?
|
136
|
+
end
|
137
|
+
|
119
138
|
test "manifest name key"
|
120
139
|
check "if exists" do
|
121
140
|
data.has_key?("name")
|
@@ -178,6 +197,13 @@ module Heroku
|
|
178
197
|
check "all plans are a hash" do
|
179
198
|
data["plans"].all? {|plan| plan.is_a?(Hash) }
|
180
199
|
end
|
200
|
+
check "all plans must have an id" do
|
201
|
+
data["plans"].all? {|plan| plan.has_key?("id") }
|
202
|
+
end
|
203
|
+
check "all plans have an unique id" do
|
204
|
+
ids = data["plans"].map {|plan| plan["id"] }
|
205
|
+
ids.size == ids.uniq.size
|
206
|
+
end
|
181
207
|
check "all plans have a name" do
|
182
208
|
data["plans"].all? {|plan| plan.has_key?("name") }
|
183
209
|
end
|
@@ -208,10 +234,10 @@ module Heroku
|
|
208
234
|
end
|
209
235
|
|
210
236
|
|
211
|
-
class
|
237
|
+
class ProvisionResponseCheck < Check
|
212
238
|
|
213
239
|
def call!
|
214
|
-
response = data[:
|
240
|
+
response = data[:provision_response]
|
215
241
|
test "response"
|
216
242
|
check "contains an id" do
|
217
243
|
response.has_key?("id")
|
@@ -304,11 +330,12 @@ module Heroku
|
|
304
330
|
end
|
305
331
|
end
|
306
332
|
|
307
|
-
class
|
333
|
+
class ProvisionCheck < ApiCheck
|
308
334
|
include HTTP
|
309
335
|
|
310
336
|
READLEN = 1024 * 10
|
311
337
|
APPID = "app123@heroku.com"
|
338
|
+
APPNAME = "myapp"
|
312
339
|
|
313
340
|
def call!
|
314
341
|
json = nil
|
@@ -322,7 +349,8 @@ module Heroku
|
|
322
349
|
|
323
350
|
payload = {
|
324
351
|
:heroku_id => APPID,
|
325
|
-
:
|
352
|
+
:appname => APPNAME,
|
353
|
+
:plan => @data['plans'].first['id'],
|
326
354
|
:callback_url => callback
|
327
355
|
}
|
328
356
|
|
@@ -383,9 +411,9 @@ module Heroku
|
|
383
411
|
true
|
384
412
|
end
|
385
413
|
|
386
|
-
data[:
|
414
|
+
data[:provision_response] = response
|
387
415
|
|
388
|
-
run
|
416
|
+
run ProvisionResponseCheck, data
|
389
417
|
end
|
390
418
|
|
391
419
|
ensure
|
@@ -394,7 +422,7 @@ module Heroku
|
|
394
422
|
end
|
395
423
|
|
396
424
|
|
397
|
-
class
|
425
|
+
class DeprovisionCheck < ApiCheck
|
398
426
|
include HTTP
|
399
427
|
|
400
428
|
def call!
|
@@ -492,9 +520,9 @@ module Heroku
|
|
492
520
|
|
493
521
|
def call!
|
494
522
|
args = data[:args]
|
495
|
-
run
|
523
|
+
run ProvisionCheck, data
|
496
524
|
|
497
|
-
response = data[:
|
525
|
+
response = data[:provision_response]
|
498
526
|
data.merge!(:id => response["id"])
|
499
527
|
config = response["config"] || Hash.new
|
500
528
|
|
@@ -509,8 +537,7 @@ module Heroku
|
|
509
537
|
screen.message "End of #{args.first}"
|
510
538
|
end
|
511
539
|
|
512
|
-
run
|
513
|
-
run DeleteCheck, data
|
540
|
+
run DeprovisionCheck, data
|
514
541
|
end
|
515
542
|
|
516
543
|
def run_in_env(env)
|
data/samorau.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{samorau}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Blake Mizerany", "Pedro Belo", "Adam Wiggins"]
|
12
|
-
s.date = %q{2010-03-
|
12
|
+
s.date = %q{2010-03-17}
|
13
13
|
s.default_executable = %q{samorau}
|
14
14
|
s.description = %q{}
|
15
15
|
s.email = %q{pedro@heroku.com}
|
@@ -28,11 +28,11 @@ Gem::Specification.new do |s|
|
|
28
28
|
"samorau.gemspec",
|
29
29
|
"server.rb",
|
30
30
|
"set-env.sh",
|
31
|
-
"test/
|
32
|
-
"test/create_response_check_test.rb",
|
33
|
-
"test/delete_check.rb",
|
31
|
+
"test/deprovision_check.rb",
|
34
32
|
"test/helper.rb",
|
35
33
|
"test/manifest_check_test.rb",
|
34
|
+
"test/provision_check_test.rb",
|
35
|
+
"test/provision_response_check_test.rb",
|
36
36
|
"test/sso_check_test.rb"
|
37
37
|
]
|
38
38
|
s.homepage = %q{http://heroku.com}
|
@@ -41,11 +41,11 @@ Gem::Specification.new do |s|
|
|
41
41
|
s.rubygems_version = %q{1.3.6}
|
42
42
|
s.summary = %q{}
|
43
43
|
s.test_files = [
|
44
|
-
"test/
|
45
|
-
"test/create_response_check_test.rb",
|
46
|
-
"test/delete_check.rb",
|
44
|
+
"test/deprovision_check.rb",
|
47
45
|
"test/helper.rb",
|
48
46
|
"test/manifest_check_test.rb",
|
47
|
+
"test/provision_check_test.rb",
|
48
|
+
"test/provision_response_check_test.rb",
|
49
49
|
"test/sso_check_test.rb"
|
50
50
|
]
|
51
51
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/helper"
|
2
2
|
require "heroku/samorau"
|
3
3
|
|
4
|
-
class
|
4
|
+
class DeprovisionCheckTest < Test::Unit::TestCase
|
5
5
|
include Heroku::Samorau
|
6
6
|
|
7
7
|
setup do
|
@@ -12,7 +12,7 @@ class DeleteCheckTest < Test::Unit::TestCase
|
|
12
12
|
]
|
13
13
|
end
|
14
14
|
|
15
|
-
def check ;
|
15
|
+
def check ; DeprovisionCheck ; end
|
16
16
|
|
17
17
|
test "valid on 200" do
|
18
18
|
assert_valid do |check|
|
data/test/manifest_check_test.rb
CHANGED
@@ -8,12 +8,23 @@ class ManifestCheckTest < Test::Unit::TestCase
|
|
8
8
|
|
9
9
|
setup do
|
10
10
|
@data = Manifest.skeleton
|
11
|
+
@data["plans"] << {
|
12
|
+
"id" => "advanced",
|
13
|
+
"name" => "Advanced",
|
14
|
+
"price" => "100",
|
15
|
+
"price_unit" => "month"
|
16
|
+
}
|
11
17
|
end
|
12
18
|
|
13
19
|
test "is valid if no errors" do
|
14
20
|
assert_valid
|
15
21
|
end
|
16
22
|
|
23
|
+
test "has an id" do
|
24
|
+
@data.delete("id")
|
25
|
+
assert_invalid
|
26
|
+
end
|
27
|
+
|
17
28
|
test "has a name" do
|
18
29
|
@data.delete("name")
|
19
30
|
assert_invalid
|
@@ -89,13 +100,23 @@ class ManifestCheckTest < Test::Unit::TestCase
|
|
89
100
|
assert_invalid
|
90
101
|
end
|
91
102
|
|
103
|
+
test "all plans have an id" do
|
104
|
+
@data["plans"].first.delete("id")
|
105
|
+
assert_invalid
|
106
|
+
end
|
107
|
+
|
108
|
+
test "all plans have an unique id" do
|
109
|
+
@data["plans"].first["id"] = @data["plans"].last["id"]
|
110
|
+
assert_invalid
|
111
|
+
end
|
112
|
+
|
92
113
|
test "all plans have a name" do
|
93
114
|
@data["plans"].first.delete("name")
|
94
115
|
assert_invalid
|
95
116
|
end
|
96
117
|
|
97
118
|
test "all plans have a unique name" do
|
98
|
-
@data["plans"]
|
119
|
+
@data["plans"].first["name"] = @data["plans"].last["name"]
|
99
120
|
assert_invalid
|
100
121
|
end
|
101
122
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/helper"
|
2
2
|
require "heroku/samorau"
|
3
3
|
|
4
|
-
class
|
4
|
+
class ProvisionCheckTest < Test::Unit::TestCase
|
5
5
|
include Heroku::Samorau
|
6
6
|
|
7
7
|
setup do
|
@@ -12,7 +12,7 @@ class CreateCheckTest < Test::Unit::TestCase
|
|
12
12
|
]
|
13
13
|
end
|
14
14
|
|
15
|
-
def check ;
|
15
|
+
def check ; ProvisionCheck ; end
|
16
16
|
|
17
17
|
test "valid on 200 for the regular check, and 401 for the auth check" do
|
18
18
|
assert_valid do |check|
|
@@ -34,7 +34,7 @@ class CreateCheckTest < Test::Unit::TestCase
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
test "runs
|
37
|
+
test "runs provision response check" do
|
38
38
|
@responses[0] = [200, to_json({ :noid => 456 })]
|
39
39
|
assert_invalid do |check|
|
40
40
|
stub :post, check, @responses
|
@@ -1,14 +1,14 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/helper"
|
2
2
|
require 'heroku/samorau'
|
3
3
|
|
4
|
-
class
|
4
|
+
class ProvisionResponseCheckTest < Test::Unit::TestCase
|
5
5
|
include Heroku::Samorau
|
6
6
|
|
7
|
-
def check ;
|
7
|
+
def check ; ProvisionResponseCheck ; end
|
8
8
|
|
9
9
|
setup do
|
10
10
|
@response = { "id" => "123" }
|
11
|
-
@data = Manifest.skeleton.merge(:
|
11
|
+
@data = Manifest.skeleton.merge(:provision_response => @response)
|
12
12
|
end
|
13
13
|
|
14
14
|
test "is valid if no errors" do
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 3
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Blake Mizerany
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-03-
|
19
|
+
date: 2010-03-17 00:00:00 -07:00
|
20
20
|
default_executable: samorau
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -129,11 +129,11 @@ files:
|
|
129
129
|
- samorau.gemspec
|
130
130
|
- server.rb
|
131
131
|
- set-env.sh
|
132
|
-
- test/
|
133
|
-
- test/create_response_check_test.rb
|
134
|
-
- test/delete_check.rb
|
132
|
+
- test/deprovision_check.rb
|
135
133
|
- test/helper.rb
|
136
134
|
- test/manifest_check_test.rb
|
135
|
+
- test/provision_check_test.rb
|
136
|
+
- test/provision_response_check_test.rb
|
137
137
|
- test/sso_check_test.rb
|
138
138
|
has_rdoc: true
|
139
139
|
homepage: http://heroku.com
|
@@ -166,9 +166,9 @@ signing_key:
|
|
166
166
|
specification_version: 3
|
167
167
|
summary: ""
|
168
168
|
test_files:
|
169
|
-
- test/
|
170
|
-
- test/create_response_check_test.rb
|
171
|
-
- test/delete_check.rb
|
169
|
+
- test/deprovision_check.rb
|
172
170
|
- test/helper.rb
|
173
171
|
- test/manifest_check_test.rb
|
172
|
+
- test/provision_check_test.rb
|
173
|
+
- test/provision_response_check_test.rb
|
174
174
|
- test/sso_check_test.rb
|