kensa 1.2.0rc3 → 1.2.0rc4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kensa (1.2.0rc2)
4
+ kensa (1.2.0rc4)
5
+ artifice (~> 0.6.0)
5
6
  launchy (~> 2.0.5)
6
7
  mechanize (~> 1.0.0)
7
8
  rest-client (~> 1.6.7)
data/bin/kensa CHANGED
@@ -24,7 +24,6 @@ ARGV.options do |o|
24
24
  o.on("-h", "--help") { command = "help" }
25
25
  o.on("-p plan", "--plan") { |plan| options[:plan] = plan }
26
26
  o.on("-v", "--version") { options[:command] = "version" }
27
- o.on("-t template", "--template") { |t| options[:template] = t }
28
27
  o.parse!
29
28
  end
30
29
 
@@ -34,8 +33,6 @@ begin
34
33
  args = ARGV.dup
35
34
  ARGV.clear
36
35
  Client.new(args, options).run!
37
- rescue Client::CommandFailed => e
38
- puts "We're sorry, but #{e.message} "
39
36
  rescue Client::CommandInvalid
40
37
  abort File.read(__FILE__).split('__END__').last
41
38
  end
@@ -66,17 +63,10 @@ OPTIONS
66
63
  --post
67
64
  Use HTTP POST for single sign-on instead of GET
68
65
 
69
- -t, --template name
70
- Desired template to clone for create command from:
71
- git://github.com/heroku/kensa-template-<name>
72
- try sinatra, clojure, or node
73
-
74
66
  COMMANDS
75
67
 
76
68
  init Creates a skeleton manifest
77
69
 
78
- create <name> Creates a skeleton application from --template
79
-
80
70
  test <type> Simulate call from Heroku (provision or deprovision)
81
71
 
82
72
  run <command> Provisions a resource and runs command in returned ENV
@@ -103,3 +93,4 @@ TEST TYPES
103
93
 
104
94
  manifest
105
95
  Confirm that the manifest is valid. Automatically runs before all tests.
96
+
data/kensa.gemspec CHANGED
@@ -17,16 +17,17 @@ Gem::Specification.new do |s|
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  s.require_paths = ["lib"]
19
19
 
20
- s.add_development_dependency(%q<json>, [">= 0"])
21
- s.add_development_dependency(%q<sinatra>, ["~> 1.2.6"])
22
- s.add_development_dependency(%q<timecop>, ["~> 0.3.5"])
23
- s.add_development_dependency(%q<rr>, ["~> 1.0.4"])
24
- s.add_development_dependency(%q<artifice>, ["~> 0.6"])
25
- s.add_development_dependency(%q<haml>, ["~> 3.1.3"])
26
- s.add_runtime_dependency(%q<test-unit>, ["~> 1.2.3"])
27
- s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.7"])
28
- s.add_runtime_dependency(%q<yajl-ruby>, ["~> 0.8.3"])
29
- s.add_runtime_dependency(%q<term-ansicolor>, ["~> 1.0.6"])
30
- s.add_runtime_dependency(%q<launchy>, ["~> 2.0.5"])
31
- s.add_runtime_dependency(%q<mechanize>, ["~> 1.0.0"])
20
+ s.add_development_dependency('json', [">= 0"])
21
+ s.add_development_dependency('sinatra', ["~> 1.2.6"])
22
+ s.add_development_dependency('timecop', ["~> 0.3.5"])
23
+ s.add_development_dependency('rr', ["~> 1.0.4"])
24
+ s.add_development_dependency('artifice', ["~> 0.6"])
25
+ s.add_development_dependency('haml', ["~> 3.1.3"])
26
+ s.add_runtime_dependency('test-unit', ["~> 1.2.3"])
27
+ s.add_runtime_dependency('rest-client', ["~> 1.6.7"])
28
+ s.add_runtime_dependency('yajl-ruby', ["~> 0.8.3"])
29
+ s.add_runtime_dependency('term-ansicolor', ["~> 1.0.6"])
30
+ s.add_runtime_dependency('launchy', ["~> 2.0.5"])
31
+ s.add_runtime_dependency('mechanize', ["~> 1.0.0"])
32
+ s.add_runtime_dependency('artifice', ["~> 0.6.0"])
32
33
  end
@@ -3,46 +3,9 @@ require 'term/ansicolor'
3
3
  require 'launchy'
4
4
 
5
5
  module Heroku
6
- class Git
7
- class << self
8
- def verify_create(app_name, template)
9
- raise CommandInvalid.new("template #{clone_url(template)} does not exist") unless template_exists?(template)
10
- raise CommandInvalid.new("Need git to clone repository") unless git_installed?
11
- end
12
-
13
- def template_exists?(template)
14
- true
15
- end
16
-
17
- def git_installed?
18
- `git` rescue false
19
- end
20
-
21
- def clone(app_name, template)
22
- verify_create(app_name, template)
23
- cmd = "git clone #{clone_url(template)} #{app_name}"
24
- puts cmd
25
- `#{cmd}`
26
- raise Exception.new("couldn't clone the repository from #{clone_url(template)}") unless File.directory?("#{app_name}")
27
- puts "Created #{app_name} from #{template} template"
28
- end
29
-
30
- def clone_url(name)
31
- prefix = ENV['REPO_PREFIX'] || "heroku"
32
- if name.include? "://" #its a full url
33
- return name
34
- elsif name.include? "/" #its a non-heroku repo
35
- name = "#{prefix}/#{name}"
36
- else #its one of ours
37
- name = "#{prefix}/kensa-create-#{name}"
38
- end
39
-
40
- "git://github.com/#{name}"
41
- end
42
- end
43
- end
44
-
45
6
  module Kensa
7
+ class UserError < RuntimeError; end
8
+
46
9
  class Client
47
10
  def initialize(args, options)
48
11
  @args = args
@@ -53,10 +16,7 @@ module Heroku
53
16
  @options[:filename]
54
17
  end
55
18
 
56
- #you fucked up
57
19
  class CommandInvalid < Exception; end
58
- #we fucked up
59
- class CommandFailed < Exception; end
60
20
 
61
21
  def run!
62
22
  command = @args.shift || @options[:command]
@@ -69,23 +29,6 @@ module Heroku
69
29
  Screen.new.message "Initialized new addon manifest in #{filename}\n"
70
30
  end
71
31
 
72
- def create
73
- app_name = @args.shift
74
- template = @options[:template]
75
- raise CommandInvalid.new("Need git to supply a template") unless template
76
- raise CommandInvalid.new("Need git to supply an application name") unless app_name
77
-
78
- begin
79
- Git.clone(app_name, template)
80
- rescue Exception => e
81
- raise CommandFailed.new("error cloning #{Git.clone_url(template)} into #{app_name}")
82
- end
83
-
84
- Dir.chdir("./#{app_name}")
85
- `./after_clone #{app_name}` if File.exist?('./after_clone')
86
- end
87
-
88
-
89
32
  def test
90
33
  case check = @args.shift
91
34
  when "manifest"
@@ -1,6 +1,6 @@
1
1
  module Heroku
2
2
  module Kensa
3
- VERSION = "1.2.0rc3"
3
+ VERSION = "1.2.0rc4"
4
4
  end
5
5
  end
6
6
 
@@ -3,6 +3,10 @@ require 'artifice'
3
3
  require 'rest-client'
4
4
  require 'yajl'
5
5
  require 'lib/heroku/kensa/manifest'
6
- %w{response test_case formatter}.each do |lib|
6
+ %w{response http formatter}.each do |lib|
7
7
  require "test/lib/#{lib}"
8
8
  end
9
+
10
+ class Test::Unit::TestCase
11
+ include Heroku::Kensa::HTTPTest
12
+ end
@@ -13,10 +13,9 @@ module Test
13
13
 
14
14
  private
15
15
  def add_error(exception)
16
- if exception.class == Errno::ECONNREFUSED
16
+ if exception.is_a? Heroku::Kensa::UserError
17
17
  @test_passed = false
18
- message = "Unable to connect to your API."
19
- @_result.add_failure(Failure.new(name, filter_backtrace(caller()), message))
18
+ @_result.add_failure(Failure.new(name, filter_backtrace(caller()), exception.message))
20
19
  else
21
20
  add_error_with_connection_exception(exception)
22
21
  end
@@ -1,4 +1,4 @@
1
- class Test::Unit::TestCase
1
+ module Heroku::Kensa::HTTPTest
2
2
  def make_token(id, salt, timestamp)
3
3
  Digest::SHA1.hexdigest([id, salt, timestamp].join(':'))
4
4
  end
@@ -19,10 +19,14 @@ class Test::Unit::TestCase
19
19
  opts = meth == :get ? { :params => params } : params
20
20
  response = RestClient.send(meth, "#{uri.to_s}", opts)
21
21
  Response.new(response.code, response.body, response.cookies)
22
+ rescue Errno::ECONNREFUSED
23
+ raise UserError.new("Unable to connect to your API.")
22
24
  rescue RestClient::Forbidden
23
25
  Response.new(403)
24
26
  rescue RestClient::Unauthorized
25
27
  Response.new(401)
28
+ rescue RestClient::InternalServerError
29
+ raise UserError.new("HTTP 500 Internal Server Error")
26
30
  end
27
31
 
28
32
  def get(path, params = {})
data/test/lib/response.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  Response = Struct.new(:code, :body, :cookies) do
2
2
  def json_body
3
+ if !self.body || self.body.empty?
4
+ raise Heroku::Kensa::UserError.new("response body empty")
5
+ end
3
6
  Yajl::Parser.parse(self.body)
4
7
  end
5
8
  end
@@ -78,5 +78,4 @@ class ProviderServer < Sinatra::Base
78
78
  session[:heroku] = true
79
79
  haml :index
80
80
  end
81
-
82
81
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kensa
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0rc3
4
+ version: 1.2.0rc4
5
5
  prerelease: 5
6
6
  platform: ruby
7
7
  authors:
@@ -13,11 +13,11 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2011-10-17 00:00:00.000000000Z
16
+ date: 2011-10-25 00:00:00.000000000Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: json
20
- requirement: &70298725075380 !ruby/object:Gem::Requirement
20
+ requirement: &70143233487380 !ruby/object:Gem::Requirement
21
21
  none: false
22
22
  requirements:
23
23
  - - ! '>='
@@ -25,10 +25,10 @@ dependencies:
25
25
  version: '0'
26
26
  type: :development
27
27
  prerelease: false
28
- version_requirements: *70298725075380
28
+ version_requirements: *70143233487380
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: sinatra
31
- requirement: &70298725074800 !ruby/object:Gem::Requirement
31
+ requirement: &70143233486780 !ruby/object:Gem::Requirement
32
32
  none: false
33
33
  requirements:
34
34
  - - ~>
@@ -36,10 +36,10 @@ dependencies:
36
36
  version: 1.2.6
37
37
  type: :development
38
38
  prerelease: false
39
- version_requirements: *70298725074800
39
+ version_requirements: *70143233486780
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: timecop
42
- requirement: &70298725074220 !ruby/object:Gem::Requirement
42
+ requirement: &70143233486160 !ruby/object:Gem::Requirement
43
43
  none: false
44
44
  requirements:
45
45
  - - ~>
@@ -47,10 +47,10 @@ dependencies:
47
47
  version: 0.3.5
48
48
  type: :development
49
49
  prerelease: false
50
- version_requirements: *70298725074220
50
+ version_requirements: *70143233486160
51
51
  - !ruby/object:Gem::Dependency
52
52
  name: rr
53
- requirement: &70298725073680 !ruby/object:Gem::Requirement
53
+ requirement: &70143233485520 !ruby/object:Gem::Requirement
54
54
  none: false
55
55
  requirements:
56
56
  - - ~>
@@ -58,10 +58,10 @@ dependencies:
58
58
  version: 1.0.4
59
59
  type: :development
60
60
  prerelease: false
61
- version_requirements: *70298725073680
61
+ version_requirements: *70143233485520
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: artifice
64
- requirement: &70298725073100 !ruby/object:Gem::Requirement
64
+ requirement: &70143233484660 !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
67
  - - ~>
@@ -69,10 +69,10 @@ dependencies:
69
69
  version: '0.6'
70
70
  type: :development
71
71
  prerelease: false
72
- version_requirements: *70298725073100
72
+ version_requirements: *70143233484660
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: haml
75
- requirement: &70298725072560 !ruby/object:Gem::Requirement
75
+ requirement: &70143233484140 !ruby/object:Gem::Requirement
76
76
  none: false
77
77
  requirements:
78
78
  - - ~>
@@ -80,10 +80,10 @@ dependencies:
80
80
  version: 3.1.3
81
81
  type: :development
82
82
  prerelease: false
83
- version_requirements: *70298725072560
83
+ version_requirements: *70143233484140
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: test-unit
86
- requirement: &70298725071980 !ruby/object:Gem::Requirement
86
+ requirement: &70143233483660 !ruby/object:Gem::Requirement
87
87
  none: false
88
88
  requirements:
89
89
  - - ~>
@@ -91,10 +91,10 @@ dependencies:
91
91
  version: 1.2.3
92
92
  type: :runtime
93
93
  prerelease: false
94
- version_requirements: *70298725071980
94
+ version_requirements: *70143233483660
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: rest-client
97
- requirement: &70298725071440 !ruby/object:Gem::Requirement
97
+ requirement: &70143233482980 !ruby/object:Gem::Requirement
98
98
  none: false
99
99
  requirements:
100
100
  - - ~>
@@ -102,10 +102,10 @@ dependencies:
102
102
  version: 1.6.7
103
103
  type: :runtime
104
104
  prerelease: false
105
- version_requirements: *70298725071440
105
+ version_requirements: *70143233482980
106
106
  - !ruby/object:Gem::Dependency
107
107
  name: yajl-ruby
108
- requirement: &70298725070860 !ruby/object:Gem::Requirement
108
+ requirement: &70143233482240 !ruby/object:Gem::Requirement
109
109
  none: false
110
110
  requirements:
111
111
  - - ~>
@@ -113,10 +113,10 @@ dependencies:
113
113
  version: 0.8.3
114
114
  type: :runtime
115
115
  prerelease: false
116
- version_requirements: *70298725070860
116
+ version_requirements: *70143233482240
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: term-ansicolor
119
- requirement: &70298725070320 !ruby/object:Gem::Requirement
119
+ requirement: &70143233481460 !ruby/object:Gem::Requirement
120
120
  none: false
121
121
  requirements:
122
122
  - - ~>
@@ -124,10 +124,10 @@ dependencies:
124
124
  version: 1.0.6
125
125
  type: :runtime
126
126
  prerelease: false
127
- version_requirements: *70298725070320
127
+ version_requirements: *70143233481460
128
128
  - !ruby/object:Gem::Dependency
129
129
  name: launchy
130
- requirement: &70298725004540 !ruby/object:Gem::Requirement
130
+ requirement: &70143233476760 !ruby/object:Gem::Requirement
131
131
  none: false
132
132
  requirements:
133
133
  - - ~>
@@ -135,10 +135,10 @@ dependencies:
135
135
  version: 2.0.5
136
136
  type: :runtime
137
137
  prerelease: false
138
- version_requirements: *70298725004540
138
+ version_requirements: *70143233476760
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: mechanize
141
- requirement: &70298725003960 !ruby/object:Gem::Requirement
141
+ requirement: &70143233476160 !ruby/object:Gem::Requirement
142
142
  none: false
143
143
  requirements:
144
144
  - - ~>
@@ -146,7 +146,18 @@ dependencies:
146
146
  version: 1.0.0
147
147
  type: :runtime
148
148
  prerelease: false
149
- version_requirements: *70298725003960
149
+ version_requirements: *70143233476160
150
+ - !ruby/object:Gem::Dependency
151
+ name: artifice
152
+ requirement: &70143233475540 !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 0.6.0
158
+ type: :runtime
159
+ prerelease: false
160
+ version_requirements: *70143233475540
150
161
  description: Kensa is a command-line tool to help add-on providers integrating their
151
162
  services with Heroku. It manages manifest files, and provides a TDD-like approach
152
163
  for programmers to test and develop their APIs.
@@ -171,14 +182,12 @@ files:
171
182
  - lib/heroku/kensa/sso.rb
172
183
  - lib/heroku/kensa/version.rb
173
184
  - set-env.sh
174
- - test.rb
175
- - test/create_test.rb
176
185
  - test/deprovision_test.rb
177
186
  - test/helper.rb
178
187
  - test/lib/dependencies.rb
179
188
  - test/lib/formatter.rb
189
+ - test/lib/http.rb
180
190
  - test/lib/response.rb
181
- - test/lib/test_case.rb
182
191
  - test/manifest_generation_test.rb
183
192
  - test/manifest_test.rb
184
193
  - test/plan_change_test.rb
@@ -212,13 +221,12 @@ signing_key:
212
221
  specification_version: 3
213
222
  summary: Tool to help Heroku add-on providers integrating their services
214
223
  test_files:
215
- - test/create_test.rb
216
224
  - test/deprovision_test.rb
217
225
  - test/helper.rb
218
226
  - test/lib/dependencies.rb
219
227
  - test/lib/formatter.rb
228
+ - test/lib/http.rb
220
229
  - test/lib/response.rb
221
- - test/lib/test_case.rb
222
230
  - test/manifest_generation_test.rb
223
231
  - test/manifest_test.rb
224
232
  - test/plan_change_test.rb
data/test.rb DELETED
@@ -1 +0,0 @@
1
- puts ARGV
data/test/create_test.rb DELETED
@@ -1,12 +0,0 @@
1
- $:.unshift(File.expand_path("../..",__FILE__))
2
- require 'test/lib/dependencies'
3
-
4
- class CreateTest < Test::Unit::TestCase
5
- def kensa(cmd)
6
- `./bin/kensa #{cmd}`
7
- end
8
-
9
- def test_create_with_manifest
10
- kensa "create"
11
- end
12
- end