ci_in_a_can 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec408de18d9c47e09339a8c2ed0bc8453a42a039
4
- data.tar.gz: cb23d747865712a372931f1a558fee78f618bf95
3
+ metadata.gz: 4ae03b9e39da688340553f31bb593eaf46892635
4
+ data.tar.gz: feb268bfb18a9d8f60776987d922b5846bd3d57f
5
5
  SHA512:
6
- metadata.gz: 8475a583069b024c3460c151fdbc30b0f404072936784378a9be2076eb19a25b6acfbf03601b551497914adc154085c00afbbf2744140113beaf5304c31d2d4d
7
- data.tar.gz: fe8538c757f0d30cb4da661c083e06285a031d0a5a9563c891c63f0060d7dc582797fe85fcc800f921676b7190b9f24bb2c0d6e90f5c28950aa8f9090fdebe7f
6
+ metadata.gz: a87f02275b1d2ab4bb3777eea044ba3d8d84fa8e4eee08688e278ef24dfec0f3c25ee65a9700f0328225a175d2f753d8899e9df7420f62dfbb95dd171c0ebfc3
7
+ data.tar.gz: e84daf4eb367ac55b6cb392542472378ad70532e0d56db755f961c881e50cb0a26a53d4ef6aeedb6cbb6736919fa7a2b7c1d046be5ddf16646fb59b072d19c54
@@ -0,0 +1,7 @@
1
+ module CiInACan
2
+ module Cleaner
3
+ def self.remove_local_copy_of build
4
+ CiInACan::Bash.run "rm -rf \"#{build.local_location}\""
5
+ end
6
+ end
7
+ end
@@ -51,10 +51,10 @@ require 'ci_in_a_can'
51
51
 
52
52
  this_directory = File.expand_path(File.dirname(__FILE__) + '/../')
53
53
 
54
- eval("CiInACan::App.jobs_location = '\#{this_directory}' + '/jobs'")
54
+ eval("CiInACan::Web.jobs_location = '\#{this_directory}' + '/jobs'")
55
55
  eval("CiInACan.results_location = '\#{this_directory}' + '/results'")
56
56
 
57
- use CiInACan::App
57
+ use CiInACan::Sinatra
58
58
  run Sinatra::Application
59
59
  EOF
60
60
  end
@@ -3,13 +3,17 @@ module CiInACan
3
3
  module Cloner
4
4
 
5
5
  def self.clone_a_local_copy_for build
6
- CiInACan::Bash.run commands_to_run_for(build).join('; ')
6
+ execute the_commands_to_clone_the(build)
7
7
  end
8
8
 
9
- def self.commands_to_run_for build
9
+ def self.execute command
10
+ CiInACan::Bash.run command
11
+ end
12
+
13
+ def self.the_commands_to_clone_the build
10
14
  ["git clone #{build.git_ssh} #{build.local_location}",
11
15
  "cd #{build.local_location}",
12
- "git checkout #{build.sha}"]
16
+ "git checkout #{build.sha}"].join('; ')
13
17
  end
14
18
 
15
19
  end
@@ -6,6 +6,7 @@ module CiInACan
6
6
  report_pending_status_for build
7
7
  clone_a_local_copy_of build
8
8
  test_results = run_the_tests_for build
9
+ CiInACan::Cleaner.remove_local_copy_of build
9
10
  send_notifications_for build, test_results
10
11
  end
11
12
 
@@ -0,0 +1,64 @@
1
+ require 'sinatra/base'
2
+
3
+ module CiInACan
4
+
5
+ class Sinatra < Sinatra::Base
6
+
7
+ enable :sessions
8
+
9
+ get '/' do
10
+ html = CiInACan::Web.new.show_a_list_of_the_runs
11
+ CiInACan::WebContent.layout_page_around html
12
+ end
13
+
14
+ get '/login' do
15
+ html = CiInACan::Web.new.login_page
16
+ CiInACan::WebContent.layout_page_around html
17
+ end
18
+
19
+ post '/login' do
20
+ CiInACan::Web.new(params: params, session: session)
21
+ .submit_a_passphrase
22
+ redirect '/'
23
+ end
24
+
25
+ get '/test_result/:id' do
26
+ html = CiInACan::Web.new(params: params)
27
+ .show_the_test_result
28
+ CiInACan::WebContent.layout_page_around html
29
+ end
30
+
31
+ get '/test_result/:id.json' do
32
+ CiInACan::Web.new(params: params)
33
+ .show_the_test_result_in_json
34
+ end
35
+
36
+ get %r{/repo/(.+)} do
37
+ web = CiInACan::Web.new(params: params, session: session)
38
+
39
+ unless web.logged_in?
40
+ redirect '/login'
41
+ return
42
+ end
43
+
44
+ html = web.show_the_repo_edit_form
45
+ CiInACan::WebContent.layout_page_around html
46
+ end
47
+
48
+ post %r{/repo/(.+)} do
49
+ web = CiInACan::Web.new(params: params, session: session)
50
+ unless web.logged_in?
51
+ redirect '/login'
52
+ return
53
+ end
54
+ repo = web.update_repo_details
55
+ redirect "/repo/#{repo.id}"
56
+ end
57
+
58
+ post %r{/push/(.+)} do
59
+ CiInACan::Web.new(params: params).start_a_new_build
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -1,3 +1,3 @@
1
1
  module CiInACan
2
- VERSION = "0.2.5"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -6,8 +6,6 @@ module CiInACan
6
6
 
7
7
  def to_html
8
8
  run_html = the_original_value.map { |r| r.to_html }.join("\n")
9
-
10
- CiInACan::WebContent.full_page_of(
11
9
  <<EOF
12
10
  <table class="table table-bordered">
13
11
  <tbody>
@@ -15,7 +13,6 @@ module CiInACan
15
13
  </tbody>
16
14
  </table>
17
15
  EOF
18
- )
19
16
  end
20
17
 
21
18
  end
@@ -5,7 +5,6 @@ module CiInACan
5
5
  class LoginForm < ViewModel
6
6
 
7
7
  def to_html
8
- CiInACan::WebContent.full_page_of(
9
8
  <<EOF
10
9
  <form action="/login" method="post">
11
10
  Passphrase
@@ -13,7 +12,6 @@ Passphrase
13
12
  <button type="submit">Submit</button>
14
13
  </form>
15
14
  EOF
16
- )
17
15
  end
18
16
 
19
17
  end
@@ -5,7 +5,6 @@ module CiInACan
5
5
  class RepoForm < ViewModel
6
6
 
7
7
  def to_html
8
- CiInACan::WebContent.full_page_of(
9
8
  <<EOF
10
9
  <form action="/repo/#{id}" method="post">
11
10
  <div>#{url}</div>
@@ -15,7 +14,6 @@ module CiInACan
15
14
  <input type="submit">Submit</input>
16
15
  </form>
17
16
  EOF
18
- )
19
17
  end
20
18
 
21
19
  end
@@ -46,7 +46,7 @@ module CiInACan
46
46
 
47
47
  def show_the_test_result
48
48
  test_result = CiInACan::TestResult.find(params[:id])
49
- CiInACan::WebContent.full_page_of test_result.to_html
49
+ test_result.to_html
50
50
  end
51
51
 
52
52
  def update_repo_details
@@ -2,7 +2,7 @@ module CiInACan
2
2
 
3
3
  module WebContent
4
4
 
5
- def self.full_page_of content
5
+ def self.layout_page_around content
6
6
  <<EOF
7
7
  <html>
8
8
  <head>
@@ -0,0 +1,23 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe CiInACan::Cleaner do
4
+
5
+ describe "removing a local copy of a build" do
6
+
7
+ ['a', 'b'].each do |local_location|
8
+
9
+ describe "different locations" do
10
+
11
+ it "should exist" do
12
+ build = CiInACan::Build.new(local_location: local_location)
13
+ CiInACan::Bash.expects(:run).with("rm -rf \"#{local_location}\"")
14
+ CiInACan::Cleaner.remove_local_copy_of build
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -11,6 +11,7 @@ describe CiInACan::Runner do
11
11
  CiInACan::Cloner.stubs(:clone_a_local_copy_for)
12
12
  CiInACan::TestRunner.stubs(:run_tests_for)
13
13
  CiInACan::TestResultNotifier.stubs(:send_for)
14
+ CiInACan::Cleaner.stubs(:remove_local_copy_of)
14
15
  end
15
16
 
16
17
  it "should clone the git repo" do
@@ -22,6 +23,11 @@ describe CiInACan::Runner do
22
23
  CiInACan::TestRunner.expects(:run_tests_for).with build
23
24
  CiInACan::Runner.run build
24
25
  end
26
+
27
+ it "should cleanup after itself" do
28
+ CiInACan::Cleaner.expects(:remove_local_copy_of).with build
29
+ CiInACan::Runner.run build
30
+ end
25
31
 
26
32
  it "should run the test after the clone" do
27
33
  count = 0
@@ -31,6 +37,14 @@ describe CiInACan::Runner do
31
37
  CiInACan::Runner.run build
32
38
  end
33
39
 
40
+ it "should cleanup after the test results are retrieved" do
41
+ count = 0
42
+ CiInACan::TestRunner.stubs(:run_tests_for).with { count += 1 }
43
+ CiInACan::Cleaner.stubs(:remove_local_copy_of).with { count.must_equal 1; true }
44
+
45
+ CiInACan::Runner.run build
46
+ end
47
+
34
48
  it "should call the test result notifier with the build and the results" do
35
49
  test_results = Object.new
36
50
  CiInACan::TestRunner.stubs(:run_tests_for).with(build).returns test_results
@@ -47,7 +47,6 @@ describe CiInACan::Web do
47
47
 
48
48
  params[:id] = Object.new
49
49
  test_result = Object.new
50
- web_content = Object.new
51
50
  html = Object.new
52
51
 
53
52
  test_result.stubs(:to_html).returns html
@@ -56,13 +55,9 @@ describe CiInACan::Web do
56
55
  .with(params[:id])
57
56
  .returns test_result
58
57
 
59
- CiInACan::WebContent.stubs(:full_page_of)
60
- .with(html)
61
- .returns web_content
62
-
63
58
  result = web.show_the_test_result
64
59
 
65
- result.must_be_same_as web_content
60
+ result.must_be_same_as html
66
61
 
67
62
  end
68
63
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ci_in_a_can
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darren Cauthon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-09 00:00:00.000000000 Z
11
+ date: 2014-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -227,10 +227,10 @@ files:
227
227
  - bin/ciinacan
228
228
  - ci_in_a_can.gemspec
229
229
  - lib/ci_in_a_can.rb
230
- - lib/ci_in_a_can/app.rb
231
230
  - lib/ci_in_a_can/bash.rb
232
231
  - lib/ci_in_a_can/bash_result.rb
233
232
  - lib/ci_in_a_can/build.rb
233
+ - lib/ci_in_a_can/cleaner.rb
234
234
  - lib/ci_in_a_can/cli.rb
235
235
  - lib/ci_in_a_can/cli/files.rb
236
236
  - lib/ci_in_a_can/cli/structure_builder.rb
@@ -243,6 +243,7 @@ files:
243
243
  - lib/ci_in_a_can/repo.rb
244
244
  - lib/ci_in_a_can/run.rb
245
245
  - lib/ci_in_a_can/runner.rb
246
+ - lib/ci_in_a_can/sinatra.rb
246
247
  - lib/ci_in_a_can/test_result.rb
247
248
  - lib/ci_in_a_can/test_result_notifier.rb
248
249
  - lib/ci_in_a_can/test_runner.rb
@@ -260,6 +261,7 @@ files:
260
261
  - spec/ci_in_a_can/bash_result_spec.rb
261
262
  - spec/ci_in_a_can/bash_spec.rb
262
263
  - spec/ci_in_a_can/build_spec.rb
264
+ - spec/ci_in_a_can/cleaner_spec.rb
263
265
  - spec/ci_in_a_can/cli/structure_builder_spec.rb
264
266
  - spec/ci_in_a_can/cli_spec.rb
265
267
  - spec/ci_in_a_can/cloner_spec.rb
@@ -304,6 +306,7 @@ test_files:
304
306
  - spec/ci_in_a_can/bash_result_spec.rb
305
307
  - spec/ci_in_a_can/bash_spec.rb
306
308
  - spec/ci_in_a_can/build_spec.rb
309
+ - spec/ci_in_a_can/cleaner_spec.rb
307
310
  - spec/ci_in_a_can/cli/structure_builder_spec.rb
308
311
  - spec/ci_in_a_can/cli_spec.rb
309
312
  - spec/ci_in_a_can/cloner_spec.rb
@@ -1,67 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- module CiInACan
4
-
5
- class App < Sinatra::Base
6
-
7
- enable :sessions
8
-
9
- before do
10
- session[:authenticated] = session[:passphrase] == ENV['PASSPHRASE'].to_s
11
- end
12
-
13
- class << self
14
- attr_accessor :jobs_location
15
- end
16
-
17
- get '/login' do
18
- CiInACan::Web.new.login_page
19
- end
20
-
21
- post '/login' do
22
- web = CiInACan::Web.new(params: params, session: session)
23
- web.submit_a_passphrase
24
- redirect '/'
25
- end
26
-
27
- get '/test_result/:id.json' do
28
- CiInACan::Web.new(params: params).show_the_test_result_in_json
29
- end
30
-
31
- post %r{/repo/(.+)} do
32
-
33
- web = CiInACan::Web.new(params: params, session: session)
34
- unless web.logged_in?
35
- redirect '/login'
36
- return
37
- end
38
- repo = web.update_repo_details
39
- redirect "/repo/#{repo.id}"
40
- end
41
-
42
- get %r{/repo/(.+)} do
43
- web = CiInACan::Web.new(params: params, session: session)
44
-
45
- unless web.logged_in?
46
- redirect '/login'
47
- return
48
- end
49
-
50
- web.show_the_repo_edit_form
51
- end
52
-
53
- get '/test_result/:id' do
54
- CiInACan::Web.new(params: params).show_the_test_result
55
- end
56
-
57
- get '/' do
58
- CiInACan::Web.new.show_a_list_of_the_runs
59
- end
60
-
61
- post %r{/push/(.+)} do
62
- CiInACan::Web.new(params: params).start_a_new_build
63
- end
64
-
65
- end
66
-
67
- end