kensa 1.2.0rc3 → 1.2.0rc4

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.
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