bait 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.bait/test.sh +2 -1
- data/.rspec +1 -0
- data/Gemfile.lock +3 -1
- data/VERSION +1 -1
- data/bait.gemspec +1 -0
- data/bin/bait +2 -4
- data/lib/bait/api.rb +6 -2
- data/lib/bait/build.rb +14 -16
- data/lib/bait/cli.rb +56 -0
- data/lib/bait/object.rb +12 -0
- data/lib/bait/public/css/styles.css +34 -1
- data/lib/bait/simple_query.rb +7 -2
- data/lib/bait/tester.rb +10 -18
- data/lib/bait/views/builds.haml +2 -4
- data/spec/lib/bait/api_spec.rb +56 -53
- data/spec/lib/bait/build_spec.rb +16 -0
- data/spec/lib/bait/tester_spec.rb +12 -7
- data/spec/spec_helper.rb +11 -0
- metadata +20 -13
- data/DEVELOP +0 -5
- data/lib/bait/objective_c/dependency_orderer.rb +0 -48
- data/lib/bait/objective_c/project.rb +0 -17
- data/lib/bait/project.rb +0 -25
- data/spec/lib/bait/objective_c/dependency_orderer_spec.rb +0 -8
- data/spec/lib/bait/objective_c/project_spec.rb +0 -8
- data/spec/lib/bait/project_spec.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25a481dd7eaf99ce25666d6517669073b3869278
|
4
|
+
data.tar.gz: 333a3a8a7c89765b3c68f6bdb12ef4036e81a318
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa0fed76b8214092e82b98cd08d179d0363ab6e49c697d7926e070bf958833dffa652d26995632973cd19fc64cd76fdf61ab5592d6fa78028b4e5f9d0930ab31
|
7
|
+
data.tar.gz: 747d2bda333bd4f8faebaa4e989eff1640cc86cd6724a2ca7150f888afc8cc7dd8b4ac916289fc31260c048a774800ca4659ed81ad2060a80d4a82adc8a80392
|
data/.bait/test.sh
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color --format documentation
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bait (0.
|
4
|
+
bait (0.4.0)
|
5
|
+
ansi2html
|
5
6
|
git
|
6
7
|
haml
|
7
8
|
moneta
|
@@ -19,6 +20,7 @@ GEM
|
|
19
20
|
i18n (~> 0.6, >= 0.6.4)
|
20
21
|
multi_json (~> 1.0)
|
21
22
|
adapter (0.7.0)
|
23
|
+
ansi2html (5.3.4)
|
22
24
|
builder (3.0.4)
|
23
25
|
coderay (1.0.9)
|
24
26
|
daemons (1.1.9)
|
data/VERSION
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
2
2
|
|
data/bait.gemspec
CHANGED
data/bin/bait
CHANGED
data/lib/bait/api.rb
CHANGED
@@ -30,7 +30,10 @@ module Bait
|
|
30
30
|
end
|
31
31
|
|
32
32
|
post '/build/create' do
|
33
|
-
build = Build.create(
|
33
|
+
build = Build.create({
|
34
|
+
clone_url:params["clone_url"],
|
35
|
+
name:params["clone_url"].split('/').last
|
36
|
+
})
|
34
37
|
build.test_later
|
35
38
|
redirect '/build'
|
36
39
|
end
|
@@ -43,8 +46,9 @@ module Bait
|
|
43
46
|
get '/build/retest/:id' do
|
44
47
|
build = Build.find params['id']
|
45
48
|
build.tested = false
|
46
|
-
build.
|
49
|
+
build.output = ""
|
47
50
|
build.save
|
51
|
+
build.test_later
|
48
52
|
redirect '/build'
|
49
53
|
end
|
50
54
|
end
|
data/lib/bait/build.rb
CHANGED
@@ -1,16 +1,11 @@
|
|
1
|
-
require 'bait'
|
2
|
-
require 'moneta'
|
3
|
-
require "toystore"
|
4
|
-
require 'bait/simple_query'
|
1
|
+
require 'bait/object'
|
5
2
|
require 'bait/tester'
|
3
|
+
require 'ansi2html/main'
|
6
4
|
|
7
5
|
module Bait
|
8
|
-
class Build
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@@db_file = Bait.db_file('builds')
|
13
|
-
adapter :memory, Moneta.new(:YAML, :file => @@db_file)
|
6
|
+
class Build < Bait::Object
|
7
|
+
adapter :memory,
|
8
|
+
Moneta.new(:YAML, :file => Bait.db_file('builds'))
|
14
9
|
|
15
10
|
attribute :ref, String
|
16
11
|
attribute :owner_name, String
|
@@ -31,11 +26,9 @@ module Bait
|
|
31
26
|
def test_later
|
32
27
|
self.tested = false
|
33
28
|
self.save
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
self.tester.test!
|
38
|
-
end
|
29
|
+
fork do
|
30
|
+
self.tester.clone!
|
31
|
+
self.tester.test!
|
39
32
|
end
|
40
33
|
self
|
41
34
|
end
|
@@ -44,7 +37,12 @@ module Bait
|
|
44
37
|
!self.reload.tested?
|
45
38
|
end
|
46
39
|
|
47
|
-
|
40
|
+
def html_output
|
41
|
+
out = StringIO.new
|
42
|
+
::ANSI2HTML::Main.new(self.output, out)
|
43
|
+
return out.string
|
44
|
+
end
|
48
45
|
|
46
|
+
after_destroy { tester.cleanup! }
|
49
47
|
end
|
50
48
|
end
|
data/lib/bait/cli.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
module Bait
|
2
|
+
module CLI
|
3
|
+
USAGE = %{usage:
|
4
|
+
* bait .................... alias for bait server
|
5
|
+
* bait server ............. start the bait server
|
6
|
+
* bait init ............... setup current directory as a bait project
|
7
|
+
* bait test ............... simulate this repo being tested with bait}
|
8
|
+
|
9
|
+
##
|
10
|
+
# Start the server
|
11
|
+
def self.server
|
12
|
+
puts "Starting bait server"
|
13
|
+
require 'bait/api'
|
14
|
+
Bait::Api.run!
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Run the test suite script in .bait/test.sh
|
19
|
+
def self.test
|
20
|
+
script = File.join(Dir.pwd, ".bait", "test.sh")
|
21
|
+
unless File.executable? script
|
22
|
+
puts "Project did not have executable #{script}"
|
23
|
+
puts "Run 'bait init' to create it"
|
24
|
+
exit 1
|
25
|
+
else
|
26
|
+
system(script)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Create .bait/ and executable .bait/test.sh
|
32
|
+
def self.init
|
33
|
+
bait_dir = File.join(Dir.pwd, ".bait")
|
34
|
+
if File.directory? bait_dir
|
35
|
+
puts "Directory already exists: #{bait_dir}"
|
36
|
+
else
|
37
|
+
script = File.join(bait_dir, 'test.sh')
|
38
|
+
FileUtils.mkdir bait_dir
|
39
|
+
puts "Created #{bait_dir}"
|
40
|
+
File.open(script, 'w') do |f|
|
41
|
+
f.puts "#!/bin/bash"
|
42
|
+
f.puts "echo edit me"
|
43
|
+
end
|
44
|
+
File.chmod(0744, script)
|
45
|
+
puts "Created executable script #{script}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.method_missing method
|
50
|
+
unless method.to_sym == :help
|
51
|
+
puts "Command not found: #{method}"
|
52
|
+
end
|
53
|
+
puts USAGE
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/bait/object.rb
ADDED
@@ -7,5 +7,38 @@ http://yuilibrary.com/license/
|
|
7
7
|
|
8
8
|
html{color:#000;background:#FFF}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}input,textarea,select{*font-size:100%}legend{color:#000}#yui3-css-stamp.cssreset{display:none}
|
9
9
|
|
10
|
+
.bold {
|
11
|
+
font-weight: bold;
|
12
|
+
}
|
13
|
+
.black {
|
14
|
+
color: black;
|
15
|
+
}
|
16
|
+
.red {
|
17
|
+
color: red;
|
18
|
+
}
|
19
|
+
.green {
|
20
|
+
color: green;
|
21
|
+
}
|
22
|
+
.yellow {
|
23
|
+
color: yellow;
|
24
|
+
}
|
25
|
+
.blue {
|
26
|
+
color: blue;
|
27
|
+
}
|
28
|
+
.magenta {
|
29
|
+
color: magenta;
|
30
|
+
}
|
31
|
+
.cyan {
|
32
|
+
color: cyan;
|
33
|
+
}
|
34
|
+
.white {
|
35
|
+
color: white;
|
36
|
+
}
|
37
|
+
.grey {
|
38
|
+
color: grey;
|
39
|
+
}
|
10
40
|
|
11
|
-
|
41
|
+
.build .output {
|
42
|
+
color:white;
|
43
|
+
background-color:black;
|
44
|
+
}
|
data/lib/bait/simple_query.rb
CHANGED
@@ -10,12 +10,17 @@ module Bait
|
|
10
10
|
self.class.ids = self.class.ids.reject{|id| id == self.id}
|
11
11
|
end
|
12
12
|
end
|
13
|
+
|
14
|
+
def id_list_key
|
15
|
+
"#{self.name.split('::').last.downcase}_ids"
|
16
|
+
end
|
17
|
+
|
13
18
|
def ids
|
14
|
-
Bait.store.raw[
|
19
|
+
Bait.store.raw[id_list_key] ||= []
|
15
20
|
end
|
16
21
|
|
17
22
|
def ids=(new_ids)
|
18
|
-
Bait.store.raw[
|
23
|
+
Bait.store.raw[id_list_key] = new_ids
|
19
24
|
end
|
20
25
|
|
21
26
|
def all
|
data/lib/bait/tester.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'bait'
|
2
2
|
require 'bait/build'
|
3
3
|
require 'git'
|
4
|
-
require '
|
4
|
+
require 'open3'
|
5
5
|
|
6
6
|
module Bait
|
7
7
|
class Tester
|
@@ -20,22 +20,15 @@ module Bait
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def test!
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
r.each { |line| @build.output << line }
|
27
|
-
@build.passed = PTY.check(pid).exitstatus == 0
|
28
|
-
end
|
29
|
-
rescue PTY::ChildExited => e
|
30
|
-
@build.output << e
|
31
|
-
@build.passed = false
|
32
|
-
end
|
33
|
-
@build.tested = true
|
34
|
-
rescue Errno::ENOENT => ex
|
35
|
-
@build.output << "A test script was expected but missing.\nError: #{ex.message}"
|
36
|
-
ensure
|
37
|
-
@build.save
|
23
|
+
Open3.popen2e(script) do |stdin, oe, wait_thr|
|
24
|
+
oe.each {|line| @build.output << line }
|
25
|
+
@build.passed = wait_thr.value.exitstatus == 0
|
38
26
|
end
|
27
|
+
@build.tested = true
|
28
|
+
rescue Errno::ENOENT => ex
|
29
|
+
@build.output << "A test script was expected but missing.\nError: #{ex.message}"
|
30
|
+
ensure
|
31
|
+
@build.save
|
39
32
|
end
|
40
33
|
|
41
34
|
def clone_path
|
@@ -48,8 +41,7 @@ module Bait
|
|
48
41
|
Git.clone(@build.clone_url, @build.name, :path => sandbox_directory)
|
49
42
|
rescue => ex
|
50
43
|
msg = "Failed to clone #{@build.clone_url}"
|
51
|
-
|
52
|
-
@build.stderr = "#{msg}\n\n#{ex.message}\n\n#{ex.backtrace}"
|
44
|
+
@build.output << "#{msg}\n\n#{ex.message}\n\n#{ex.backtrace}"
|
53
45
|
@build.save
|
54
46
|
end
|
55
47
|
end
|
data/lib/bait/views/builds.haml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Listing Builds
|
2
2
|
%ul
|
3
3
|
- @builds.each do |build|
|
4
|
-
%li
|
4
|
+
%li.build
|
5
5
|
%hr
|
6
6
|
.name= build.name
|
7
7
|
%a.clone_url{href:build.clone_url}= build.clone_url
|
@@ -12,9 +12,7 @@ Listing Builds
|
|
12
12
|
= build.passed? ? "Passed!" : "Failed!"
|
13
13
|
- else
|
14
14
|
Queued
|
15
|
-
.output
|
16
|
-
Output:
|
17
|
-
%pre= build.output
|
15
|
+
%pre.output= build.html_output
|
18
16
|
.actions
|
19
17
|
%a{href:"/build/remove/#{build.id}"} Remove
|
20
18
|
%a{href:"/build/retest/#{build.id}"} Retest
|
data/spec/lib/bait/api_spec.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'bait/api'
|
3
|
-
require 'bait/build'
|
4
3
|
|
5
|
-
describe
|
4
|
+
describe Bait::Api do
|
6
5
|
let(:app) { Bait::Api }
|
7
6
|
subject { last_response }
|
8
7
|
|
8
|
+
let (:build) { Bait::Build.last }
|
9
|
+
|
9
10
|
describe "github post-receive hook" do
|
10
11
|
let(:github_json) do
|
11
12
|
<<-GITHUB_JSON
|
12
13
|
{
|
13
14
|
"before": "5aef35982fb2d34e9d9d4502f6ede1072793222d",
|
14
15
|
"repository": {
|
15
|
-
"url": "http://github.com/
|
16
|
+
"url": "http://github.com/keyvanfatehi/bait",
|
16
17
|
"name": "github",
|
17
18
|
"owner": {
|
18
19
|
"email": "chris@ozmm.org",
|
@@ -45,8 +46,6 @@ describe "Sinatra App" do
|
|
45
46
|
GITHUB_JSON
|
46
47
|
end
|
47
48
|
|
48
|
-
let (:build) { Bait::Build.last }
|
49
|
-
|
50
49
|
describe "POST /" do
|
51
50
|
before do
|
52
51
|
post '/', payload: github_json
|
@@ -61,65 +60,69 @@ describe "Sinatra App" do
|
|
61
60
|
build.ref.should eq "refs/heads/master"
|
62
61
|
end
|
63
62
|
|
64
|
-
|
63
|
+
specify { build.should be_queued }
|
65
64
|
end
|
65
|
+
end
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
describe "GET /" do
|
68
|
+
before { get '/' }
|
69
|
+
it { should be_redirect }
|
70
|
+
end
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
72
|
+
describe "GET /build" do
|
73
|
+
before do
|
74
|
+
Bait::Build.create(name: "quickfox", clone_url:'...')
|
75
|
+
Bait::Build.create(name: "slowsloth", clone_url:'...')
|
76
|
+
get '/build'
|
77
|
+
end
|
78
78
|
|
79
|
-
|
79
|
+
it { should be_ok }
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
end
|
81
|
+
it "shows the builds" do
|
82
|
+
subject.body.should match /quickfox/
|
83
|
+
subject.body.should match /slowsloth/
|
85
84
|
end
|
85
|
+
end
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
92
|
-
it "can create a build manually" do
|
93
|
-
build.clone_url.should eq test_url
|
94
|
-
end
|
95
|
-
specify { build.should be_queued }
|
87
|
+
describe "POST /build/create" do
|
88
|
+
let(:test_url){ repo_path }
|
89
|
+
before do
|
90
|
+
post '/build/create', {clone_url:test_url}
|
96
91
|
end
|
92
|
+
specify { build.clone_url.should eq test_url }
|
93
|
+
specify { build.name.should match(/^bait/) }
|
94
|
+
specify { build.should be_queued }
|
95
|
+
end
|
97
96
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
109
|
-
it { should be_redirect }
|
97
|
+
describe "GET /build/remove/#" do
|
98
|
+
before do
|
99
|
+
@build = Bait::Build.create(name: "quickfox", clone_url:'...')
|
100
|
+
@sandbox = @build.tester.sandbox_directory
|
101
|
+
get "/build/remove/#{@build.id}"
|
102
|
+
end
|
103
|
+
it "removes the build from store and its files from the filesystem" do
|
104
|
+
expect{@build.reload}.to raise_error Toy::NotFound
|
105
|
+
Bait::Build.ids.should be_empty
|
106
|
+
Pathname.new(@sandbox).should_not exist
|
110
107
|
end
|
108
|
+
it { should be_redirect }
|
109
|
+
end
|
111
110
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
111
|
+
describe "GET /build/retest/#" do
|
112
|
+
before do
|
113
|
+
@build = Bait::Build.create(name: "quickfox", clone_url:'...')
|
114
|
+
@build.tested = true
|
115
|
+
@build.output = "bla bla old output"
|
116
|
+
@build.save
|
117
|
+
get "/build/retest/#{@build.id}"
|
118
|
+
@build.reload
|
119
|
+
end
|
120
|
+
it "queues the build for retesting" do
|
121
|
+
@build.should be_queued
|
122
|
+
end
|
123
|
+
it "clears the previous output" do
|
124
|
+
@build.output.should be_blank
|
123
125
|
end
|
126
|
+
it { should be_redirect }
|
124
127
|
end
|
125
128
|
end
|
data/spec/lib/bait/build_spec.rb
CHANGED
@@ -41,6 +41,17 @@ describe Bait::Build do
|
|
41
41
|
|
42
42
|
let (:build) { Bait::Build.create(name: "app", clone_url:'...') }
|
43
43
|
|
44
|
+
describe "#test_later" do
|
45
|
+
it "forks in order to clone and test" do
|
46
|
+
build.should_receive(:fork) do |&block|
|
47
|
+
build.tester.should_receive(:clone!)
|
48
|
+
build.tester.should_receive(:test!)
|
49
|
+
block.call
|
50
|
+
end
|
51
|
+
build.test_later
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
44
55
|
describe "#tester" do
|
45
56
|
specify { build.tester.should be_a Bait::Tester }
|
46
57
|
end
|
@@ -75,4 +86,9 @@ describe Bait::Build do
|
|
75
86
|
it { should be_queued }
|
76
87
|
end
|
77
88
|
end
|
89
|
+
|
90
|
+
describe "#html_output" do
|
91
|
+
before { build.output = "\e[33mHello\e[0m" ; build.save }
|
92
|
+
specify { build.html_output.should eq %{<span class="yellow">Hello</span>} }
|
93
|
+
end
|
78
94
|
end
|
@@ -2,10 +2,6 @@ require 'spec_helper'
|
|
2
2
|
require 'bait/tester'
|
3
3
|
|
4
4
|
describe Bait::Tester do
|
5
|
-
let(:repo_path) do
|
6
|
-
path = File.join(File.dirname(__FILE__), '..', '..', '..')
|
7
|
-
File.expand_path(path)
|
8
|
-
end
|
9
5
|
let(:build) { Bait::Build.create(name: "bait", clone_url:repo_path) }
|
10
6
|
let(:tester) { build.tester }
|
11
7
|
|
@@ -24,8 +20,17 @@ describe Bait::Tester do
|
|
24
20
|
end
|
25
21
|
|
26
22
|
describe "#clone!" do
|
27
|
-
|
28
|
-
|
23
|
+
context 'valid clone url' do
|
24
|
+
before { tester.clone! }
|
25
|
+
specify { build.output.should_not match /Failed to clone/ }
|
26
|
+
specify { tester.should be_cloned }
|
27
|
+
end
|
28
|
+
context "invalid clone url" do
|
29
|
+
let(:build) { Bait::Build.create(name: "bait", clone_url:'invalid') }
|
30
|
+
before { tester.clone! }
|
31
|
+
specify { build.output.should match /Failed to clone/ }
|
32
|
+
specify { tester.should_not be_cloned }
|
33
|
+
end
|
29
34
|
end
|
30
35
|
|
31
36
|
describe "#test!" do
|
@@ -50,7 +55,7 @@ describe Bait::Tester do
|
|
50
55
|
tester.test!
|
51
56
|
end
|
52
57
|
it { should_not be_tested }
|
53
|
-
it "has
|
58
|
+
it "has errors in output" do
|
54
59
|
subject.output.should match /script was expected but missing/
|
55
60
|
end
|
56
61
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,9 +2,20 @@ ENV['RACK_ENV'] = "test"
|
|
2
2
|
require 'simplecov'
|
3
3
|
SimpleCov.start
|
4
4
|
|
5
|
+
# Use simplecov with forking specs
|
6
|
+
pid = Process.pid
|
7
|
+
SimpleCov.at_exit do
|
8
|
+
SimpleCov.result.format! if Process.pid == pid
|
9
|
+
end
|
10
|
+
|
5
11
|
require 'bait'
|
6
12
|
require 'fileutils'
|
7
13
|
|
14
|
+
def repo_path
|
15
|
+
path = File.join(File.dirname(__FILE__), '..')
|
16
|
+
File.expand_path(path)
|
17
|
+
end
|
18
|
+
|
8
19
|
def clear_storage
|
9
20
|
FileUtils.rm_rf Bait.storage_dir
|
10
21
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bait
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keyvan Fatehi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -192,6 +192,20 @@ dependencies:
|
|
192
192
|
- - '>='
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: ansi2html
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - '>='
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - '>='
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
195
209
|
description: Accepts github push event webhook to clone and execute .bait/test.sh
|
196
210
|
email:
|
197
211
|
- keyvan@digitalfilmtree.com
|
@@ -202,7 +216,7 @@ extra_rdoc_files: []
|
|
202
216
|
files:
|
203
217
|
- .bait/test.sh
|
204
218
|
- .gitignore
|
205
|
-
-
|
219
|
+
- .rspec
|
206
220
|
- Gemfile
|
207
221
|
- Gemfile.lock
|
208
222
|
- Guardfile
|
@@ -215,9 +229,8 @@ files:
|
|
215
229
|
- lib/bait.rb
|
216
230
|
- lib/bait/api.rb
|
217
231
|
- lib/bait/build.rb
|
218
|
-
- lib/bait/
|
219
|
-
- lib/bait/
|
220
|
-
- lib/bait/project.rb
|
232
|
+
- lib/bait/cli.rb
|
233
|
+
- lib/bait/object.rb
|
221
234
|
- lib/bait/public/css/styles.css
|
222
235
|
- lib/bait/simple_query.rb
|
223
236
|
- lib/bait/tester.rb
|
@@ -226,9 +239,6 @@ files:
|
|
226
239
|
- lib/bait/views/layout.haml
|
227
240
|
- spec/lib/bait/api_spec.rb
|
228
241
|
- spec/lib/bait/build_spec.rb
|
229
|
-
- spec/lib/bait/objective_c/dependency_orderer_spec.rb
|
230
|
-
- spec/lib/bait/objective_c/project_spec.rb
|
231
|
-
- spec/lib/bait/project_spec.rb
|
232
242
|
- spec/lib/bait/tester_spec.rb
|
233
243
|
- spec/lib/bait_spec.rb
|
234
244
|
- spec/spec_helper.rb
|
@@ -253,16 +263,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
253
263
|
version: '0'
|
254
264
|
requirements: []
|
255
265
|
rubyforge_project:
|
256
|
-
rubygems_version: 2.0.
|
266
|
+
rubygems_version: 2.0.3
|
257
267
|
signing_key:
|
258
268
|
specification_version: 4
|
259
269
|
summary: build and integration test service
|
260
270
|
test_files:
|
261
271
|
- spec/lib/bait/api_spec.rb
|
262
272
|
- spec/lib/bait/build_spec.rb
|
263
|
-
- spec/lib/bait/objective_c/dependency_orderer_spec.rb
|
264
|
-
- spec/lib/bait/objective_c/project_spec.rb
|
265
|
-
- spec/lib/bait/project_spec.rb
|
266
273
|
- spec/lib/bait/tester_spec.rb
|
267
274
|
- spec/lib/bait_spec.rb
|
268
275
|
- spec/spec_helper.rb
|
data/DEVELOP
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'bait/objective_c/project'
|
2
|
-
|
3
|
-
module Bait
|
4
|
-
module ObjectiveC
|
5
|
-
class DependencyOrderer
|
6
|
-
attr_accessor :errors, :order, :queue, :project
|
7
|
-
def initialize path_array, project
|
8
|
-
@project = project
|
9
|
-
@queue = path_array
|
10
|
-
@order = []
|
11
|
-
@errors = []
|
12
|
-
end
|
13
|
-
|
14
|
-
def examine_file path
|
15
|
-
return unless path && File.exists?(path)
|
16
|
-
if @order.include? path
|
17
|
-
return
|
18
|
-
end
|
19
|
-
imports_within(path).each do |name|
|
20
|
-
examine_file @project.glob(name).first
|
21
|
-
end
|
22
|
-
@order << path
|
23
|
-
end
|
24
|
-
|
25
|
-
def imports_within path
|
26
|
-
imports = []
|
27
|
-
File.open(path, 'r') do |f|
|
28
|
-
f.each_line do |line|
|
29
|
-
if matches = line.match(/^#import "(.*)"/)
|
30
|
-
imports << matches[1]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
rescue => ex
|
35
|
-
@errors << ex
|
36
|
-
ensure
|
37
|
-
return imports
|
38
|
-
end
|
39
|
-
|
40
|
-
def start
|
41
|
-
@queue.each do |path|
|
42
|
-
examine_file path
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'bait/project'
|
2
|
-
require 'bait/objective_c/dependency_orderer'
|
3
|
-
|
4
|
-
module Bait
|
5
|
-
module ObjectiveC
|
6
|
-
class Project < Bait::Project
|
7
|
-
def h_files
|
8
|
-
@h_files ||= ordered_dependencies '*.h', ObjectiveC::DependencyOrderer
|
9
|
-
end
|
10
|
-
|
11
|
-
def m_files
|
12
|
-
@m_files ||= ordered_dependencies '*.m', ObjectiveC::DependencyOrderer
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
data/lib/bait/project.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Bait
|
2
|
-
class Project
|
3
|
-
def initialize root_path
|
4
|
-
unless Dir.exists? root_path
|
5
|
-
raise "Expected a valid directory"
|
6
|
-
end
|
7
|
-
@path = Pathname.new(root_path)
|
8
|
-
end
|
9
|
-
|
10
|
-
def glob pattern
|
11
|
-
cache ||= {}
|
12
|
-
if value = cache[pattern]
|
13
|
-
value
|
14
|
-
else
|
15
|
-
cache[pattern] = Dir.glob @path.join("**/#{pattern}")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def ordered_dependencies file_pattern, klass
|
20
|
-
orderer = klass.new(glob(file_pattern), self)
|
21
|
-
orderer.start
|
22
|
-
orderer.order
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
require 'bait/objective_c/dependency_orderer'
|
2
|
-
|
3
|
-
describe Bait::ObjectiveC::DependencyOrderer do
|
4
|
-
it "initializes with a path array and a Bait::Project" do
|
5
|
-
project = Bait::ObjectiveC::Project.new File.dirname(__FILE__)
|
6
|
-
Bait::ObjectiveC::DependencyOrderer.new [], project
|
7
|
-
end
|
8
|
-
end
|