torquebox-stompbox 0.3.0 → 0.3.1

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
@@ -37,6 +37,9 @@ GEM
37
37
  dm-core (~> 1.1.0)
38
38
  fastercsv (~> 1.5.4)
39
39
  json (~> 1.4.6)
40
+ dm-sqlite-adapter (1.1.0)
41
+ dm-do-adapter (~> 1.1.0)
42
+ do_sqlite3 (~> 0.10.2)
40
43
  dm-timestamps (1.1.0)
41
44
  dm-core (~> 1.1.0)
42
45
  dm-transactions (1.1.0)
@@ -56,11 +59,16 @@ GEM
56
59
  data_objects (= 0.10.4)
57
60
  do_jdbc (= 0.10.4)
58
61
  jdbc-postgres (>= 8.2)
62
+ do_sqlite3 (0.10.4-java)
63
+ data_objects (= 0.10.4)
64
+ do_jdbc (= 0.10.4)
65
+ jdbc-sqlite3 (>= 3.5.8)
59
66
  extlib (0.9.15)
60
67
  fastercsv (1.5.4)
61
68
  git (1.2.5)
62
69
  haml (3.1.1)
63
70
  jdbc-postgres (9.0.801)
71
+ jdbc-sqlite3 (3.6.14.2.056-java)
64
72
  jeweler (1.5.2)
65
73
  bundler (~> 1.0.0)
66
74
  git (>= 1.2.5)
@@ -83,6 +91,7 @@ GEM
83
91
  rspec-expectations (2.5.0)
84
92
  diff-lcs (~> 1.1.2)
85
93
  rspec-mocks (2.5.0)
94
+ sass (3.1.1)
86
95
  sinatra (1.1.2)
87
96
  rack (~> 1.1)
88
97
  tilt (~> 1.2)
@@ -96,6 +105,7 @@ GEM
96
105
  sinatra-sugar (0.5.0)
97
106
  monkey-lib (~> 0.5.0)
98
107
  sinatra (~> 1.0)
108
+ sqlite3 (1.3.3)
99
109
  state_machine (0.10.4)
100
110
  stringex (1.2.1)
101
111
  thor (0.14.6)
@@ -127,6 +137,7 @@ DEPENDENCIES
127
137
  dm-migrations (~> 1.1)
128
138
  dm-observer (~> 1.1)
129
139
  dm-postgres-adapter (~> 1.1)
140
+ dm-sqlite-adapter
130
141
  dm-timestamps (~> 1.1)
131
142
  extlib
132
143
  git
@@ -137,8 +148,10 @@ DEPENDENCIES
137
148
  rack-test
138
149
  rake
139
150
  rspec
151
+ sass (~> 3.1)
140
152
  sinatra (= 1.1.2)
141
153
  sinatra-reloader (= 0.5.0)
154
+ sqlite3
142
155
  state_machine
143
156
  thor
144
157
  torquebox (= 1.0.0)
data/README.md CHANGED
@@ -81,7 +81,9 @@ you'll want to pay attention to.
81
81
  JBossAS. See the **Authentication** section below for more information.
82
82
 
83
83
  * **API_KEY** This should be set to something unguessable like an SHA1 hash.
84
- You can generate these any number of ways.
84
+ If you deploy as a gem a random, 40 character string is generated for you.
85
+ If you install manually, you'll want to generate your own key. You can
86
+ generate these any number of ways.
85
87
 
86
88
  Here's one one way to generate a key.
87
89
 
@@ -126,7 +128,8 @@ request to your StompBox. Play around.
126
128
 
127
129
  ## Caveats
128
130
 
129
- This project is very immature and there are many features which are outstanding (such as any real authentication). You should **not** use it in a production environment. It is currently used for research, development and testing only.
131
+ You should **not** use it in a production environment. It is currently used
132
+ for research, development and testing only.
130
133
 
131
134
  ## License
132
135
 
@@ -29,7 +29,7 @@ module StompBox
29
29
  end
30
30
 
31
31
  def authenticate(username, password)
32
- return false if username.blank? || password.blank?
32
+ return false if username.nil? || password.nil?
33
33
  authenticator = TorqueBox::Authentication.default
34
34
  authenticator.authenticate(username, password) do
35
35
  session[:user] = username
data/app/deployer.rb CHANGED
@@ -52,7 +52,7 @@ class Deployer
52
52
  end
53
53
 
54
54
  def undeploy
55
- TorqueBox::RakeUtils.undeploy( "#{repository_name}-knob.yml" )
55
+ TorqueBox::DeployUtils.undeploy( deployment_file )
56
56
  remove_repo if ( File.exist?( root ) )
57
57
  push.undeployed
58
58
  end
@@ -90,10 +90,28 @@ class Deployer
90
90
  @repo_name ||= push.master? ? push.repo_name : "#{push.repo_name}-#{push.branch}"
91
91
  end
92
92
 
93
+ def deployment_file
94
+ "#{repository_name}-knob.yml"
95
+ end
96
+
93
97
  def root
94
98
  "#{deployment_path}/#{repository_name}"
95
99
  end
96
100
 
101
+ def write_descriptor
102
+ repo = push.find_repository
103
+ if repo
104
+ config = push.find_repository.config
105
+ config ||= {}
106
+ config['application'] ||= {}
107
+ config['application']['root'] = root
108
+ config['application']['env'] ||= 'production'
109
+ descriptor = TorqueBox::DeployUtils.basic_deployment_descriptor(config)
110
+ descriptor.merge! config
111
+ TorqueBox::DeployUtils.deploy_yaml( descriptor, deployment_file )
112
+ end
113
+ end
114
+
97
115
  protected
98
116
 
99
117
  def remove_repo
@@ -120,11 +138,6 @@ class Deployer
120
138
  end
121
139
  end
122
140
 
123
- def write_descriptor
124
- name, descriptor = deployment( repository_name, root, "/#{repository_name}" )
125
- TorqueBox::RakeUtils.deploy_yaml( name, descriptor )
126
- end
127
-
128
141
  def path_to(file)
129
142
  "#{root}/#{file}"
130
143
  end
data/app/models.rb CHANGED
@@ -19,6 +19,7 @@ require 'state_machine'
19
19
  require 'dm-core'
20
20
  require 'dm-migrations'
21
21
  require 'dm-timestamps'
22
+ require 'dm-types'
22
23
 
23
24
  class Push
24
25
  include DataMapper::Resource
@@ -92,6 +93,10 @@ class Push
92
93
  Push.all(:status=>:deployed)
93
94
  end
94
95
 
96
+ def find_repository
97
+ Repository.get(:name=>repo_name, :branch=>branch)
98
+ end
99
+
95
100
  protected
96
101
  def parse_payload
97
102
  @parsed_payload ||= JSON.parse(self.payload)
@@ -118,6 +123,7 @@ class Repository
118
123
  property :id, Serial
119
124
  property :name, String
120
125
  property :branch, String
126
+ property :config, Yaml
121
127
 
122
128
  def self.ordered
123
129
  Repository.all(:order => [:name, :branch])
@@ -97,7 +97,18 @@ footer {
97
97
  margin-bottom: 20px;
98
98
  }
99
99
 
100
- form { display: inline-block; }
100
+ form {
101
+ display: inline-block;
102
+ p {
103
+ margin-top: 15px;
104
+ }
105
+ }
106
+
107
+ textarea {
108
+ width: 420px;
109
+ height: 220px;
110
+ padding: 4px;
111
+ }
101
112
 
102
113
  input[type=submit] {
103
114
  background-color: #ddd;
@@ -4,4 +4,9 @@
4
4
  %br
5
5
  %input{:type=>:text, :name=>'repository[branch]', :value=>repository.branch}
6
6
  %label{:for=>'repository[branch]'} Branch
7
+ %p
8
+ %label{:for=>'repository[environment]'} TorqueBox configuration as YAML
9
+ %br
10
+ %textarea{:name=>'repository[environment]'}
11
+ =repository.environment
7
12
 
@@ -0,0 +1,92 @@
1
+ #
2
+ # Copyright 2011 Red Hat, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'spec_helper'
18
+
19
+ module StompBox
20
+ describe Deployer do
21
+
22
+ ENV['TORQUEBOX_HOME'] = './.apps'
23
+
24
+ it "should write a YAML file" do
25
+ config = {
26
+ 'environment' => { 'oauth_key' => '123456789', 'oauth_secret' => '987654321' }
27
+ }
28
+ repo = Repository.create(:name=>'github', :branch=>'master', :config=>config)
29
+ push = Push.new(:payload=>payload)
30
+ push.stub!(:find_repository).and_return(repo)
31
+ deployer = Deployer.new(push)
32
+ deployer.write_descriptor
33
+ end
34
+
35
+ it "should fail gracefully if the repository can't be found" do
36
+ config = {
37
+ 'environment' => { 'oauth_key' => '123456789', 'oauth_secret' => '987654321' }
38
+ }
39
+ push = Push.new(:payload=>payload)
40
+ deployer = Deployer.new(push)
41
+ deployer.write_descriptor.should be_false
42
+ end
43
+ end
44
+
45
+
46
+ end
47
+
48
+
49
+ def payload
50
+ <<END
51
+ {"before": "5aef35982fb2d34e9d9d4502f6ede1072793222d",
52
+ "repository": {
53
+ "url": "http://github.com/defunkt/github",
54
+ "name": "github",
55
+ "description": "You are looking at it.",
56
+ "watchers": "5",
57
+ "forks": "2",
58
+ "private": "1",
59
+ "owner": {
60
+ "email": "chris@ozmm.org",
61
+ "name": "defunkt"
62
+ }
63
+ },
64
+
65
+ "commits": [
66
+ {
67
+ "id": "41a212ee83ca127e3c8cf465891ab7216a705f59",
68
+ "url": "http://github.com/defunkt/github/commit/41a212ee83ca127e3c8cf465891ab7216a705f59",
69
+ "author": {
70
+ "email": "chris@ozmm.org",
71
+ "name": "Chris Wanstrath"
72
+ },
73
+ "message": "okay i give in",
74
+ "timestamp": "2008-02-15T14:57:17-08:00",
75
+ "added": ["filepath.rb"]
76
+ },
77
+ {
78
+ "id": "de8251ff97ee194a289832576287d6f8ad74e3d0",
79
+ "url": "http://github.com/defunkt/github/commit/de8251ff97ee194a289832576287d6f8ad74e3d0",
80
+ "author": {
81
+ "email": "chris@ozmm.org",
82
+ "name": "Chris Wanstrath"
83
+ },
84
+ "message": "update pricing a tad",
85
+ "timestamp": "2008-02-15T14:36:34-08:00"
86
+ }
87
+ ],
88
+ "after": "de8251ff97ee194a289832576287d6f8ad74e3d0",
89
+ "ref": "refs/heads/master"
90
+ }
91
+ END
92
+ end
@@ -0,0 +1,31 @@
1
+ #
2
+ # Copyright 2011 Red Hat, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'spec_helper'
18
+
19
+ module StompBox
20
+
21
+ describe Repository do
22
+
23
+ it "should store config variables" do
24
+ config = {:oauth_key=>'123', :oauth_secret=>'456'}
25
+ repository = Repository.new(:name=>'chirpr', :branch=>'master', :config=>config)
26
+ repository.config.should == config
27
+ end
28
+ end
29
+
30
+ end
31
+
data/spec/spec_helper.rb CHANGED
@@ -17,7 +17,13 @@
17
17
  require 'rack/test'
18
18
  require 'stompbox'
19
19
 
20
- ENV['DATABASE_URL'] = 'postgres://stompbox:stompbox@localhost/stompbox'
20
+ # set test environment
21
+ Sinatra::Base.set :environment, :test
22
+ Sinatra::Base.set :run, false
23
+ Sinatra::Base.set :raise_errors, true
24
+ Sinatra::Base.set :logging, false
25
+
26
+ DataMapper.setup(:default, "sqlite3::memory:")
21
27
 
22
28
  def app
23
29
  @app ||= StompBox::Application.new
@@ -25,6 +31,8 @@ end
25
31
 
26
32
  RSpec.configure do |conf|
27
33
  conf.include Rack::Test::Methods
34
+ # reset database before each example is run
35
+ conf.before(:each) { DataMapper.auto_migrate! }
28
36
  end
29
37
 
30
38
 
@@ -20,15 +20,19 @@ module StompBox
20
20
 
21
21
  describe 'routes' do
22
22
 
23
- it "should respond to GET /" do
24
- get '/'
25
- last_response.should be_ok
23
+ before(:each) do
24
+ app.stub!(:require_authentication).and_return(true)
26
25
  end
27
26
 
28
- it "should respond to GET /repositories" do
29
- get '/repositories'
30
- last_response.should be_ok
31
- end
27
+ it "should respond to GET /"# do
28
+ # get '/'
29
+ # last_response.should be_ok
30
+ # end
31
+
32
+ it "should respond to GET /repositories" #do
33
+ # get '/repositories'
34
+ # last_response.should be_ok
35
+ # end
32
36
 
33
37
  it "should respond to POST /repositories" do
34
38
  post '/repositories'
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: torquebox-stompbox
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.0
5
+ version: 0.3.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Lance Ball
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-29 00:00:00 -04:00
13
+ date: 2011-05-06 00:00:00 -04:00
14
14
  default_executable: stompbox
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -91,18 +91,18 @@ dependencies:
91
91
  prerelease: false
92
92
  type: :runtime
93
93
  - !ruby/object:Gem::Dependency
94
- name: json_pure
94
+ name: sass
95
95
  version_requirements: &id008 !ruby/object:Gem::Requirement
96
96
  none: false
97
97
  requirements:
98
- - - ">="
98
+ - - ~>
99
99
  - !ruby/object:Gem::Version
100
- version: "0"
100
+ version: "3.1"
101
101
  requirement: *id008
102
102
  prerelease: false
103
103
  type: :runtime
104
104
  - !ruby/object:Gem::Dependency
105
- name: state_machine
105
+ name: json_pure
106
106
  version_requirements: &id009 !ruby/object:Gem::Requirement
107
107
  none: false
108
108
  requirements:
@@ -113,7 +113,7 @@ dependencies:
113
113
  prerelease: false
114
114
  type: :runtime
115
115
  - !ruby/object:Gem::Dependency
116
- name: git
116
+ name: state_machine
117
117
  version_requirements: &id010 !ruby/object:Gem::Requirement
118
118
  none: false
119
119
  requirements:
@@ -124,18 +124,18 @@ dependencies:
124
124
  prerelease: false
125
125
  type: :runtime
126
126
  - !ruby/object:Gem::Dependency
127
- name: data_mapper
127
+ name: git
128
128
  version_requirements: &id011 !ruby/object:Gem::Requirement
129
129
  none: false
130
130
  requirements:
131
- - - ~>
131
+ - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: "1.1"
133
+ version: "0"
134
134
  requirement: *id011
135
135
  prerelease: false
136
136
  type: :runtime
137
137
  - !ruby/object:Gem::Dependency
138
- name: dm-core
138
+ name: data_mapper
139
139
  version_requirements: &id012 !ruby/object:Gem::Requirement
140
140
  none: false
141
141
  requirements:
@@ -146,7 +146,7 @@ dependencies:
146
146
  prerelease: false
147
147
  type: :runtime
148
148
  - !ruby/object:Gem::Dependency
149
- name: dm-postgres-adapter
149
+ name: dm-core
150
150
  version_requirements: &id013 !ruby/object:Gem::Requirement
151
151
  none: false
152
152
  requirements:
@@ -157,7 +157,7 @@ dependencies:
157
157
  prerelease: false
158
158
  type: :runtime
159
159
  - !ruby/object:Gem::Dependency
160
- name: dm-migrations
160
+ name: dm-postgres-adapter
161
161
  version_requirements: &id014 !ruby/object:Gem::Requirement
162
162
  none: false
163
163
  requirements:
@@ -168,7 +168,7 @@ dependencies:
168
168
  prerelease: false
169
169
  type: :runtime
170
170
  - !ruby/object:Gem::Dependency
171
- name: dm-timestamps
171
+ name: dm-migrations
172
172
  version_requirements: &id015 !ruby/object:Gem::Requirement
173
173
  none: false
174
174
  requirements:
@@ -179,7 +179,7 @@ dependencies:
179
179
  prerelease: false
180
180
  type: :runtime
181
181
  - !ruby/object:Gem::Dependency
182
- name: dm-observer
182
+ name: dm-timestamps
183
183
  version_requirements: &id016 !ruby/object:Gem::Requirement
184
184
  none: false
185
185
  requirements:
@@ -190,69 +190,80 @@ dependencies:
190
190
  prerelease: false
191
191
  type: :runtime
192
192
  - !ruby/object:Gem::Dependency
193
- name: torquebox
193
+ name: dm-observer
194
194
  version_requirements: &id017 !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ~>
198
+ - !ruby/object:Gem::Version
199
+ version: "1.1"
200
+ requirement: *id017
201
+ prerelease: false
202
+ type: :runtime
203
+ - !ruby/object:Gem::Dependency
204
+ name: torquebox
205
+ version_requirements: &id018 !ruby/object:Gem::Requirement
195
206
  none: false
196
207
  requirements:
197
208
  - - "="
198
209
  - !ruby/object:Gem::Version
199
210
  version: 1.0.0
200
- requirement: *id017
211
+ requirement: *id018
201
212
  prerelease: false
202
213
  type: :runtime
203
214
  - !ruby/object:Gem::Dependency
204
215
  name: thor
205
- version_requirements: &id018 !ruby/object:Gem::Requirement
216
+ version_requirements: &id019 !ruby/object:Gem::Requirement
206
217
  none: false
207
218
  requirements:
208
219
  - - ">="
209
220
  - !ruby/object:Gem::Version
210
221
  version: "0"
211
- requirement: *id018
222
+ requirement: *id019
212
223
  prerelease: false
213
224
  type: :development
214
225
  - !ruby/object:Gem::Dependency
215
226
  name: jeweler
216
- version_requirements: &id019 !ruby/object:Gem::Requirement
227
+ version_requirements: &id020 !ruby/object:Gem::Requirement
217
228
  none: false
218
229
  requirements:
219
230
  - - ">="
220
231
  - !ruby/object:Gem::Version
221
232
  version: "0"
222
- requirement: *id019
233
+ requirement: *id020
223
234
  prerelease: false
224
235
  type: :development
225
236
  - !ruby/object:Gem::Dependency
226
237
  name: thor
227
- version_requirements: &id020 !ruby/object:Gem::Requirement
238
+ version_requirements: &id021 !ruby/object:Gem::Requirement
228
239
  none: false
229
240
  requirements:
230
241
  - - ">"
231
242
  - !ruby/object:Gem::Version
232
243
  version: "0.14"
233
- requirement: *id020
244
+ requirement: *id021
234
245
  prerelease: false
235
246
  type: :runtime
236
247
  - !ruby/object:Gem::Dependency
237
248
  name: bundler
238
- version_requirements: &id021 !ruby/object:Gem::Requirement
249
+ version_requirements: &id022 !ruby/object:Gem::Requirement
239
250
  none: false
240
251
  requirements:
241
252
  - - ">="
242
253
  - !ruby/object:Gem::Version
243
254
  version: 1.0.12
244
- requirement: *id021
255
+ requirement: *id022
245
256
  prerelease: false
246
257
  type: :runtime
247
258
  - !ruby/object:Gem::Dependency
248
259
  name: torquebox-rake-support
249
- version_requirements: &id022 !ruby/object:Gem::Requirement
260
+ version_requirements: &id023 !ruby/object:Gem::Requirement
250
261
  none: false
251
262
  requirements:
252
263
  - - ">="
253
264
  - !ruby/object:Gem::Version
254
265
  version: "0"
255
- requirement: *id022
266
+ requirement: *id023
256
267
  prerelease: false
257
268
  type: :runtime
258
269
  description: StompBox - Git-based deployment console for TorqueBox
@@ -285,6 +296,8 @@ files:
285
296
  - config.ru
286
297
  - stompbox.rb
287
298
  - spec/auth_spec.rb
299
+ - spec/deployer_spec.rb
300
+ - spec/repository_spec.rb
288
301
  - spec/spec_helper.rb
289
302
  - spec/stompbox_spec.rb
290
303
  has_rdoc: true
@@ -320,5 +333,7 @@ specification_version: 3
320
333
  summary: StompBox - Git-based deployment console for TorqueBox
321
334
  test_files:
322
335
  - spec/auth_spec.rb
336
+ - spec/deployer_spec.rb
337
+ - spec/repository_spec.rb
323
338
  - spec/spec_helper.rb
324
339
  - spec/stompbox_spec.rb