testbot 0.5.7 → 0.5.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/README.markdown +1 -1
- data/lib/requester/requester.rb +0 -2
- data/lib/runner/job.rb +5 -5
- data/lib/runner/runner.rb +8 -8
- data/lib/server/build.rb +0 -1
- data/lib/server/job.rb +4 -4
- data/lib/server/server.rb +1 -1
- data/lib/shared/version.rb +1 -1
- data/test/requester/requester_test.rb +1 -4
- data/test/server/server_test.rb +35 -30
- metadata +68 -68
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
0.5.8
|
2
|
+
|
3
|
+
Now only running tests from one build on a runner at a time.
|
4
|
+
|
5
|
+
This is mostly usability. Testbot should behave like when you're running your tests locally.
|
6
|
+
|
1
7
|
0.5.7
|
2
8
|
|
3
9
|
Added @meeiw's patch to support ERB in config. Added test result summarization for RSpec and Cucumber.
|
data/README.markdown
CHANGED
@@ -64,7 +64,7 @@ Using testbot with Rails 2:
|
|
64
64
|
|
65
65
|
# Add testbot to your Gemfile if you use bundler. You also need the plugin because
|
66
66
|
# Rails 2 does not load raketasks from gems.
|
67
|
-
ruby script/plugin install git://github.com/joakimk/testbot.git -r 'refs/tags/v0.5.
|
67
|
+
ruby script/plugin install git://github.com/joakimk/testbot.git -r 'refs/tags/v0.5.8'
|
68
68
|
script/generate testbot --connect 192.168.0.100
|
69
69
|
|
70
70
|
rake testbot:spec (or :rspec, :test, :features)
|
data/lib/requester/requester.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'httparty'
|
3
|
-
require 'macaddr'
|
4
3
|
require 'ostruct'
|
5
4
|
require 'erb'
|
6
5
|
require File.dirname(__FILE__) + '/../shared/ssh_tunnel'
|
@@ -49,7 +48,6 @@ module Testbot::Requester
|
|
49
48
|
build_id = HTTParty.post("#{server_uri}/builds", :body => { :root => root,
|
50
49
|
:type => adapter.type.to_s,
|
51
50
|
:project => config.project,
|
52
|
-
:requester_mac => Mac.addr,
|
53
51
|
:available_runner_usage => config.available_runner_usage,
|
54
52
|
:files => files.join(' '),
|
55
53
|
:sizes => sizes.join(' '),
|
data/lib/runner/job.rb
CHANGED
@@ -2,11 +2,11 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'runner.rb'))
|
|
2
2
|
|
3
3
|
module Testbot::Runner
|
4
4
|
class Job
|
5
|
-
attr_reader :root, :project, :
|
5
|
+
attr_reader :root, :project, :build_id
|
6
6
|
|
7
|
-
def initialize(runner, id,
|
8
|
-
@runner, @id, @
|
9
|
-
runner, id,
|
7
|
+
def initialize(runner, id, build_id, project, root, type, ruby_interpreter, files)
|
8
|
+
@runner, @id, @build_id, @project, @root, @type, @ruby_interpreter, @files =
|
9
|
+
runner, id, build_id, project, root, type, ruby_interpreter, files
|
10
10
|
end
|
11
11
|
|
12
12
|
def jruby?
|
@@ -14,7 +14,7 @@ module Testbot::Runner
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def run(instance)
|
17
|
-
puts "Running job #{@id}
|
17
|
+
puts "Running job #{@id} (build #{@build_id})... "
|
18
18
|
test_env_number = (instance == 0) ? '' : instance + 1
|
19
19
|
result = "\n#{`hostname`.chomp}:#{Dir.pwd}\n"
|
20
20
|
base_environment = "export RAILS_ENV=test; export TEST_ENV_NUMBER=#{test_env_number}; cd #{@project};"
|
data/lib/runner/runner.rb
CHANGED
@@ -33,7 +33,7 @@ module Testbot::Runner
|
|
33
33
|
|
34
34
|
def initialize(config)
|
35
35
|
@instances = []
|
36
|
-
@
|
36
|
+
@last_build_id = nil
|
37
37
|
@last_version_check = Time.now - TIME_BETWEEN_VERSION_CHECKS - 1
|
38
38
|
@config = OpenStruct.new(config)
|
39
39
|
@config.max_instances = @config.max_instances ? @config.max_instances.to_i : CPU.count
|
@@ -85,13 +85,13 @@ module Testbot::Runner
|
|
85
85
|
|
86
86
|
check_for_update if !last_check_found_a_job && time_for_update?
|
87
87
|
|
88
|
-
# Only get jobs from one
|
88
|
+
# Only get jobs from one build at a time
|
89
89
|
next_params = base_params
|
90
90
|
if @instances.size > 0
|
91
|
-
next_params.merge!({ :
|
91
|
+
next_params.merge!({ :build_id => @last_build_id })
|
92
92
|
next_params.merge!({ :no_jruby => true }) if max_jruby_instances?
|
93
93
|
else
|
94
|
-
@
|
94
|
+
@last_build_id = nil
|
95
95
|
end
|
96
96
|
|
97
97
|
# Makes sure all instances are listed as available after a run
|
@@ -102,14 +102,14 @@ module Testbot::Runner
|
|
102
102
|
next unless last_check_found_a_job
|
103
103
|
|
104
104
|
job = Job.new(*([ self, next_job.split(',') ].flatten))
|
105
|
-
if
|
105
|
+
if first_job_from_build?
|
106
106
|
fetch_code(job)
|
107
107
|
before_run(job) if File.exists?("#{job.project}/lib/tasks/testbot.rake")
|
108
108
|
end
|
109
109
|
|
110
110
|
@instances << [ Thread.new { job.run(free_instance_number) },
|
111
111
|
free_instance_number, job ]
|
112
|
-
@
|
112
|
+
@last_build_id = job.build_id
|
113
113
|
loop do
|
114
114
|
clear_completed_instances
|
115
115
|
break unless max_instances_running?
|
@@ -131,8 +131,8 @@ module Testbot::Runner
|
|
131
131
|
system "export RAILS_ENV=test; export TEST_INSTANCES=#{@config.max_instances}; cd #{job.project}; #{bundler_cmd} rake testbot:before_run"
|
132
132
|
end
|
133
133
|
|
134
|
-
def
|
135
|
-
@
|
134
|
+
def first_job_from_build?
|
135
|
+
@last_build_id == nil
|
136
136
|
end
|
137
137
|
|
138
138
|
def time_for_update?
|
data/lib/server/build.rb
CHANGED
data/lib/server/job.rb
CHANGED
@@ -15,19 +15,19 @@ module Testbot::Server
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.next(params, remove_addr)
|
18
|
-
clean_params = params.reject { |k, v|
|
18
|
+
clean_params = params.reject { |k, v| k == "no_jruby" }
|
19
19
|
runner = Runner.record! clean_params.merge({ :ip => remove_addr, :last_seen_at => Time.now })
|
20
20
|
return unless Server.valid_version?(params[:version])
|
21
|
-
[ next_job(params["
|
21
|
+
[ next_job(params["build_id"], params["no_jruby"]), runner ]
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
-
def self.next_job(
|
26
|
+
def self.next_job(build_id, no_jruby)
|
27
27
|
release_jobs_taken_by_missing_runners!
|
28
28
|
jobs = Job.all.find_all { |j|
|
29
29
|
!j.taken_at &&
|
30
|
-
(
|
30
|
+
(build_id ? j.build.id.to_s == build_id : true) &&
|
31
31
|
(no_jruby ? j.jruby != 1 : true)
|
32
32
|
}
|
33
33
|
|
data/lib/server/server.rb
CHANGED
@@ -37,7 +37,7 @@ module Testbot::Server
|
|
37
37
|
next_job, runner = Job.next(params, @env['REMOTE_ADDR'])
|
38
38
|
if next_job
|
39
39
|
next_job.update(:taken_at => Time.now, :taken_by => runner)
|
40
|
-
[ next_job.id, next_job.
|
40
|
+
[ next_job.id, next_job.build.id, next_job.project, next_job.root, next_job.type, (next_job.jruby == 1 ? 'jruby' : 'ruby'), next_job.files ].join(',')
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
data/lib/shared/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Testbot
|
2
2
|
# Don't forget to update readme and changelog
|
3
3
|
def self.version
|
4
|
-
version = "0.5.
|
4
|
+
version = "0.5.8"
|
5
5
|
dev_version_file = File.join(File.dirname(__FILE__), '..', '..', 'DEV_VERSION')
|
6
6
|
if File.exists?(dev_version_file)
|
7
7
|
version += File.read(dev_version_file)
|
@@ -82,7 +82,6 @@ module Testbot::Requester
|
|
82
82
|
context "run_tests" do
|
83
83
|
|
84
84
|
should "should be able to create a build" do
|
85
|
-
flexmock(Mac).should_receive(:addr).and_return('aa:aa:aa:aa:aa:aa')
|
86
85
|
requester = Requester.new(:server_host => "192.168.1.100", :rsync_path => '/path', :available_runner_usage => '60%', :project => 'things', :server_user => "cruise")
|
87
86
|
flexmock(RspecAdapter).should_receive(:test_files).with('spec').once.and_return([ 'spec/models/house_spec.rb', 'spec/models/car_spec.rb' ])
|
88
87
|
|
@@ -94,7 +93,6 @@ module Testbot::Requester
|
|
94
93
|
:root => "cruise@192.168.1.100:/path",
|
95
94
|
:project => "things",
|
96
95
|
:available_runner_usage => "60%",
|
97
|
-
:requester_mac => 'aa:aa:aa:aa:aa:aa',
|
98
96
|
:files => "spec/models/house_spec.rb" +
|
99
97
|
" spec/models/car_spec.rb",
|
100
98
|
:sizes => "10 20",
|
@@ -346,12 +344,11 @@ module Testbot::Requester
|
|
346
344
|
ENV['USE_JRUBY'] = "true"
|
347
345
|
requester = Requester.new
|
348
346
|
flexmock(requester).should_receive(:system)
|
349
|
-
flexmock(Mac).should_receive(:addr).and_return("00:01:..")
|
350
347
|
|
351
348
|
# This is quite ugly. I want something like hash_including instead...
|
352
349
|
other_args = { :type=>"test", :available_runner_usage=>"100%",
|
353
350
|
:root=>"testbot@:/tmp/testbot/#{ENV['USER']}", :files=>"test/some_test.rb",
|
354
|
-
|
351
|
+
:sizes=>"0", :project=>"project" }
|
355
352
|
|
356
353
|
flexmock(TestUnitAdapter).should_receive(:test_files).and_return([ 'test/some_test.rb' ])
|
357
354
|
flexmock(HTTParty).should_receive(:post).with(any, :body => other_args.merge({ :jruby => true })).and_return('5')
|
data/test/server/server_test.rb
CHANGED
@@ -25,7 +25,7 @@ module Testbot::Server
|
|
25
25
|
|
26
26
|
should "create a build and return its id" do
|
27
27
|
flexmock(Runner).should_receive(:total_instances).and_return(2)
|
28
|
-
post '/builds', :files => 'spec/models/car_spec.rb spec/models/house_spec.rb', :root => 'server:/path/to/project', :type => 'spec', :available_runner_usage => "100%", :
|
28
|
+
post '/builds', :files => 'spec/models/car_spec.rb spec/models/house_spec.rb', :root => 'server:/path/to/project', :type => 'spec', :available_runner_usage => "100%", :project => 'things', :sizes => "10 20", :jruby => false
|
29
29
|
|
30
30
|
first_build = Build.all.first
|
31
31
|
assert last_response.ok?
|
@@ -35,7 +35,6 @@ module Testbot::Server
|
|
35
35
|
assert_equal '10 20', first_build.sizes
|
36
36
|
assert_equal 'server:/path/to/project', first_build.root
|
37
37
|
assert_equal 'spec', first_build.type
|
38
|
-
assert_equal 'bb:bb:bb:bb:bb:bb', first_build.requester_mac
|
39
38
|
assert_equal 'things', first_build.project
|
40
39
|
assert_equal 0, first_build.jruby
|
41
40
|
assert_equal '', first_build.results
|
@@ -49,7 +48,7 @@ module Testbot::Server
|
|
49
48
|
["spec/models/house_spec.rb", "spec/models/house2_spec.rb"]
|
50
49
|
])
|
51
50
|
|
52
|
-
post '/builds', :files => 'spec/models/car_spec.rb spec/models/car2_spec.rb spec/models/house_spec.rb spec/models/house2_spec.rb', :root => 'server:/path/to/project', :type => 'spec', :available_runner_usage => "100%", :
|
51
|
+
post '/builds', :files => 'spec/models/car_spec.rb spec/models/car2_spec.rb spec/models/house_spec.rb spec/models/house2_spec.rb', :root => 'server:/path/to/project', :type => 'spec', :available_runner_usage => "100%", :project => 'things', :sizes => "1 1 1 1", :jruby => true
|
53
52
|
|
54
53
|
assert_equal 2, Job.count
|
55
54
|
first_job, last_job = Job.all
|
@@ -58,7 +57,6 @@ module Testbot::Server
|
|
58
57
|
|
59
58
|
assert_equal 'server:/path/to/project', first_job.root
|
60
59
|
assert_equal 'spec', first_job.type
|
61
|
-
assert_equal 'bb:bb:bb:bb:bb:bb', first_job.requester_mac
|
62
60
|
assert_equal 'things', first_job.project
|
63
61
|
assert_equal 1, first_job.jruby
|
64
62
|
assert_equal Build.all.first, first_job.build
|
@@ -103,21 +101,23 @@ module Testbot::Server
|
|
103
101
|
context "GET /jobs/next" do
|
104
102
|
|
105
103
|
should "be able to return a job and mark it as taken" do
|
106
|
-
|
104
|
+
build = Build.create
|
105
|
+
job1 = Job.create :files => 'spec/models/car_spec.rb', :root => 'server:/project', :type => 'spec', :build => build, :project => 'things', :jruby => 1
|
107
106
|
|
108
107
|
get '/jobs/next', :version => Testbot.version
|
109
108
|
assert last_response.ok?
|
110
109
|
|
111
|
-
assert_equal [ job1.id,
|
110
|
+
assert_equal [ job1.id, build.id, "things", "server:/project", "spec", "jruby", "spec/models/car_spec.rb" ].join(','), last_response.body
|
112
111
|
assert job1.taken_at != nil
|
113
112
|
end
|
114
113
|
|
115
114
|
should "not return a job that has already been taken" do
|
116
|
-
|
117
|
-
|
115
|
+
build = Build.create
|
116
|
+
job1 = Job.create :files => 'spec/models/car_spec.rb', :taken_at => Time.now, :type => 'spec', :build => build
|
117
|
+
job2 = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :build => build, :project => 'things', :jruby => 0
|
118
118
|
get '/jobs/next', :version => Testbot.version
|
119
119
|
assert last_response.ok?
|
120
|
-
assert_equal [ job2.id,
|
120
|
+
assert_equal [ job2.id, build.id, "things", "server:/project", "spec", "ruby", "spec/models/house_spec.rb" ].join(','), last_response.body
|
121
121
|
assert job2.taken_at != nil
|
122
122
|
end
|
123
123
|
|
@@ -128,7 +128,7 @@ module Testbot::Server
|
|
128
128
|
end
|
129
129
|
|
130
130
|
should "save which runner takes a job" do
|
131
|
-
job = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :
|
131
|
+
job = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :build => Build.create
|
132
132
|
get '/jobs/next', :version => Testbot.version
|
133
133
|
assert_equal Runner.first, job.taken_by
|
134
134
|
end
|
@@ -160,23 +160,25 @@ module Testbot::Server
|
|
160
160
|
end
|
161
161
|
|
162
162
|
should "only give jobs from the same source to a runner" do
|
163
|
-
|
164
|
-
|
163
|
+
build = Build.create
|
164
|
+
job1 = Job.create :files => 'spec/models/car_spec.rb', :type => 'spec', :build => build
|
165
|
+
get '/jobs/next', :version => Testbot.version, :uid => "00:...", :build_id => build.id
|
165
166
|
|
166
167
|
# Creating the second job here because of the random lookup.
|
167
|
-
job2 = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :
|
168
|
-
get '/jobs/next', :version => Testbot.version, :uid => "00:...", :
|
168
|
+
job2 = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :build => build
|
169
|
+
get '/jobs/next', :version => Testbot.version, :uid => "00:...", :build_id => build.id + 1
|
169
170
|
|
170
171
|
assert last_response.ok?
|
171
172
|
assert_equal '', last_response.body
|
172
173
|
end
|
173
174
|
|
174
175
|
should "not give more jruby jobs to an instance that can't take more" do
|
175
|
-
|
176
|
+
build = Build.create
|
177
|
+
job1 = Job.create :files => 'spec/models/car_spec.rb', :type => 'spec', :jruby => 1, :build => build
|
176
178
|
get '/jobs/next', :version => Testbot.version, :uid => "00:..."
|
177
179
|
|
178
180
|
# Creating the second job here because of the random lookup.
|
179
|
-
job2 = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :jruby => 1
|
181
|
+
job2 = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :jruby => 1, :build => build
|
180
182
|
get '/jobs/next', :version => Testbot.version, :uid => "00:...", :no_jruby => "true"
|
181
183
|
|
182
184
|
assert last_response.ok?
|
@@ -184,38 +186,40 @@ module Testbot::Server
|
|
184
186
|
end
|
185
187
|
|
186
188
|
should "still return other jobs when the runner cant take more jruby jobs" do
|
187
|
-
job1 = Job.create :files => 'spec/models/car_spec.rb', :type => 'spec', :
|
189
|
+
job1 = Job.create :files => 'spec/models/car_spec.rb', :type => 'spec', :jruby => 1, :build => Build.create
|
188
190
|
get '/jobs/next', :version => Testbot.version, :uid => "00:..."
|
189
191
|
|
190
192
|
# Creating the second job here because of the random lookup.
|
191
|
-
job2 = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :jruby => 0
|
193
|
+
job2 = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :jruby => 0, :build => Build.create
|
192
194
|
get '/jobs/next', :version => Testbot.version, :uid => "00:...", :no_jruby => "true"
|
193
195
|
|
194
196
|
assert last_response.ok?
|
195
197
|
assert_equal job2.id.to_s, last_response.body.split(',')[0]
|
196
198
|
end
|
197
199
|
|
198
|
-
should "return the jobs in random order in order to start working for a new
|
199
|
-
|
200
|
+
should "return the jobs in random order in order to start working for a new build right away" do
|
201
|
+
build1, build2 = Build.create, Build.create
|
202
|
+
20.times { Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :build => build1 }
|
200
203
|
|
201
|
-
20.times { Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :
|
204
|
+
20.times { Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :build => build2 }
|
202
205
|
|
203
|
-
|
206
|
+
build_ids = (0...10).map {
|
204
207
|
get '/jobs/next', :version => Testbot.version, :uid => "00:..."
|
205
208
|
last_response.body.split(',')[1]
|
206
209
|
}
|
207
210
|
|
208
|
-
assert
|
209
|
-
assert
|
211
|
+
assert build_ids.find { |build_id| build_id == build1.id.to_s }
|
212
|
+
assert build_ids.find { |build_id| build_id == build2.id.to_s }
|
210
213
|
end
|
211
214
|
|
212
|
-
should "return the jobs randomly when passing
|
213
|
-
|
215
|
+
should "return the jobs randomly when passing build_id" do
|
216
|
+
build = Build.create
|
217
|
+
20.times { Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :build => build }
|
214
218
|
|
215
|
-
20.times { Job.create :files => 'spec/models/car_spec.rb', :root => 'server:/project', :type => 'spec', :
|
219
|
+
20.times { Job.create :files => 'spec/models/car_spec.rb', :root => 'server:/project', :type => 'spec', :build => build }
|
216
220
|
|
217
221
|
files = (0...10).map {
|
218
|
-
get '/jobs/next', :version => Testbot.version, :uid => "00:...", :
|
222
|
+
get '/jobs/next', :version => Testbot.version, :uid => "00:...", :build_id => build.id
|
219
223
|
last_response.body.split(',').last
|
220
224
|
}
|
221
225
|
|
@@ -225,14 +229,15 @@ module Testbot::Server
|
|
225
229
|
|
226
230
|
should "return taken jobs to other runners if the runner hasn't been seen for 10 seconds or more" do
|
227
231
|
missing_runner = Runner.create(:last_seen_at => Time.now - 15)
|
228
|
-
|
232
|
+
build = Build.create
|
233
|
+
old_taken_job = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :build => build, :taken_by => missing_runner, :taken_at => Time.now - 30, :project => 'things'
|
229
234
|
|
230
235
|
new_runner = Runner.create(:uid => "00:01")
|
231
236
|
get '/jobs/next', :version => Testbot.version, :uid => "00:01"
|
232
237
|
assert_equal new_runner, old_taken_job.taken_by
|
233
238
|
|
234
239
|
assert last_response.ok?
|
235
|
-
assert_equal [ old_taken_job.id,
|
240
|
+
assert_equal [ old_taken_job.id, build.id.to_s, "things", "server:/project", "spec", "ruby", "spec/models/house_spec.rb" ].join(','), last_response.body
|
236
241
|
end
|
237
242
|
|
238
243
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: testbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 8
|
10
|
+
version: 0.5.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Joakim Kolsj\xC3\xB6"
|
@@ -15,13 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06-
|
18
|
+
date: 2011-06-29 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
23
|
none: false
|
26
24
|
requirements:
|
27
25
|
- - "="
|
@@ -32,12 +30,12 @@ dependencies:
|
|
32
30
|
- 0
|
33
31
|
- 0
|
34
32
|
version: 1.0.0
|
33
|
+
prerelease: false
|
34
|
+
name: sinatra
|
35
35
|
type: :runtime
|
36
|
-
|
36
|
+
requirement: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
|
39
|
-
prerelease: false
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
40
|
requirements:
|
43
41
|
- - ">="
|
@@ -48,12 +46,12 @@ dependencies:
|
|
48
46
|
- 6
|
49
47
|
- 1
|
50
48
|
version: 0.6.1
|
49
|
+
prerelease: false
|
50
|
+
name: httparty
|
51
51
|
type: :runtime
|
52
|
-
|
52
|
+
requirement: *id002
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
-
|
55
|
-
prerelease: false
|
56
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
57
55
|
none: false
|
58
56
|
requirements:
|
59
57
|
- - ">="
|
@@ -64,12 +62,12 @@ dependencies:
|
|
64
62
|
- 0
|
65
63
|
- 0
|
66
64
|
version: 1.0.0
|
65
|
+
prerelease: false
|
66
|
+
name: macaddr
|
67
67
|
type: :runtime
|
68
|
-
|
68
|
+
requirement: *id003
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
|
71
|
-
prerelease: false
|
72
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
73
71
|
none: false
|
74
72
|
requirements:
|
75
73
|
- - ">="
|
@@ -80,12 +78,12 @@ dependencies:
|
|
80
78
|
- 0
|
81
79
|
- 23
|
82
80
|
version: 2.0.23
|
81
|
+
prerelease: false
|
82
|
+
name: net-ssh
|
83
83
|
type: :runtime
|
84
|
-
|
84
|
+
requirement: *id004
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
|
-
|
87
|
-
prerelease: false
|
88
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
86
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
89
87
|
none: false
|
90
88
|
requirements:
|
91
89
|
- - ">="
|
@@ -96,12 +94,12 @@ dependencies:
|
|
96
94
|
- 4
|
97
95
|
- 6
|
98
96
|
version: 1.4.6
|
97
|
+
prerelease: false
|
98
|
+
name: json_pure
|
99
99
|
type: :runtime
|
100
|
-
|
100
|
+
requirement: *id005
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
|
-
|
103
|
-
prerelease: false
|
104
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
102
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
105
103
|
none: false
|
106
104
|
requirements:
|
107
105
|
- - ">="
|
@@ -112,12 +110,12 @@ dependencies:
|
|
112
110
|
- 0
|
113
111
|
- 10
|
114
112
|
version: 1.0.10
|
113
|
+
prerelease: false
|
114
|
+
name: daemons
|
115
115
|
type: :runtime
|
116
|
-
|
116
|
+
requirement: *id006
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
|
-
|
119
|
-
prerelease: false
|
120
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
118
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
121
119
|
none: false
|
122
120
|
requirements:
|
123
121
|
- - ">="
|
@@ -126,12 +124,12 @@ dependencies:
|
|
126
124
|
segments:
|
127
125
|
- 0
|
128
126
|
version: "0"
|
127
|
+
prerelease: false
|
128
|
+
name: acts_as_rails3_generator
|
129
129
|
type: :runtime
|
130
|
-
|
130
|
+
requirement: *id007
|
131
131
|
- !ruby/object:Gem::Dependency
|
132
|
-
|
133
|
-
prerelease: false
|
134
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
132
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
135
133
|
none: false
|
136
134
|
requirements:
|
137
135
|
- - ">="
|
@@ -140,12 +138,12 @@ dependencies:
|
|
140
138
|
segments:
|
141
139
|
- 0
|
142
140
|
version: "0"
|
141
|
+
prerelease: false
|
142
|
+
name: shoulda
|
143
143
|
type: :development
|
144
|
-
|
144
|
+
requirement: *id008
|
145
145
|
- !ruby/object:Gem::Dependency
|
146
|
-
|
147
|
-
prerelease: false
|
148
|
-
requirement: &id009 !ruby/object:Gem::Requirement
|
146
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
149
147
|
none: false
|
150
148
|
requirements:
|
151
149
|
- - ">="
|
@@ -154,12 +152,12 @@ dependencies:
|
|
154
152
|
segments:
|
155
153
|
- 0
|
156
154
|
version: "0"
|
155
|
+
prerelease: false
|
156
|
+
name: rack-test
|
157
157
|
type: :development
|
158
|
-
|
158
|
+
requirement: *id009
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
|
-
|
161
|
-
prerelease: false
|
162
|
-
requirement: &id010 !ruby/object:Gem::Requirement
|
160
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
163
161
|
none: false
|
164
162
|
requirements:
|
165
163
|
- - ">="
|
@@ -168,12 +166,12 @@ dependencies:
|
|
168
166
|
segments:
|
169
167
|
- 0
|
170
168
|
version: "0"
|
169
|
+
prerelease: false
|
170
|
+
name: flexmock
|
171
171
|
type: :development
|
172
|
-
|
172
|
+
requirement: *id010
|
173
173
|
- !ruby/object:Gem::Dependency
|
174
|
-
|
175
|
-
prerelease: false
|
176
|
-
requirement: &id011 !ruby/object:Gem::Requirement
|
174
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
177
175
|
none: false
|
178
176
|
requirements:
|
179
177
|
- - ">="
|
@@ -182,12 +180,12 @@ dependencies:
|
|
182
180
|
segments:
|
183
181
|
- 0
|
184
182
|
version: "0"
|
183
|
+
prerelease: false
|
184
|
+
name: cucumber
|
185
185
|
type: :development
|
186
|
-
|
186
|
+
requirement: *id011
|
187
187
|
- !ruby/object:Gem::Dependency
|
188
|
-
|
189
|
-
prerelease: false
|
190
|
-
requirement: &id012 !ruby/object:Gem::Requirement
|
188
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
191
189
|
none: false
|
192
190
|
requirements:
|
193
191
|
- - ">="
|
@@ -196,12 +194,12 @@ dependencies:
|
|
196
194
|
segments:
|
197
195
|
- 0
|
198
196
|
version: "0"
|
197
|
+
prerelease: false
|
198
|
+
name: rvm
|
199
199
|
type: :development
|
200
|
-
|
200
|
+
requirement: *id012
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
|
-
|
203
|
-
prerelease: false
|
204
|
-
requirement: &id013 !ruby/object:Gem::Requirement
|
202
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
205
203
|
none: false
|
206
204
|
requirements:
|
207
205
|
- - ">="
|
@@ -210,12 +208,12 @@ dependencies:
|
|
210
208
|
segments:
|
211
209
|
- 0
|
212
210
|
version: "0"
|
211
|
+
prerelease: false
|
212
|
+
name: rake
|
213
213
|
type: :development
|
214
|
-
|
214
|
+
requirement: *id013
|
215
215
|
- !ruby/object:Gem::Dependency
|
216
|
-
|
217
|
-
prerelease: false
|
218
|
-
requirement: &id014 !ruby/object:Gem::Requirement
|
216
|
+
version_requirements: &id014 !ruby/object:Gem::Requirement
|
219
217
|
none: false
|
220
218
|
requirements:
|
221
219
|
- - ">="
|
@@ -224,12 +222,12 @@ dependencies:
|
|
224
222
|
segments:
|
225
223
|
- 0
|
226
224
|
version: "0"
|
225
|
+
prerelease: false
|
226
|
+
name: bundler
|
227
227
|
type: :development
|
228
|
-
|
228
|
+
requirement: *id014
|
229
229
|
- !ruby/object:Gem::Dependency
|
230
|
-
|
231
|
-
prerelease: false
|
232
|
-
requirement: &id015 !ruby/object:Gem::Requirement
|
230
|
+
version_requirements: &id015 !ruby/object:Gem::Requirement
|
233
231
|
none: false
|
234
232
|
requirements:
|
235
233
|
- - ">="
|
@@ -238,12 +236,12 @@ dependencies:
|
|
238
236
|
segments:
|
239
237
|
- 0
|
240
238
|
version: "0"
|
239
|
+
prerelease: false
|
240
|
+
name: guard
|
241
241
|
type: :development
|
242
|
-
|
242
|
+
requirement: *id015
|
243
243
|
- !ruby/object:Gem::Dependency
|
244
|
-
|
245
|
-
prerelease: false
|
246
|
-
requirement: &id016 !ruby/object:Gem::Requirement
|
244
|
+
version_requirements: &id016 !ruby/object:Gem::Requirement
|
247
245
|
none: false
|
248
246
|
requirements:
|
249
247
|
- - ">="
|
@@ -252,8 +250,10 @@ dependencies:
|
|
252
250
|
segments:
|
253
251
|
- 0
|
254
252
|
version: "0"
|
253
|
+
prerelease: false
|
254
|
+
name: guard-test
|
255
255
|
type: :development
|
256
|
-
|
256
|
+
requirement: *id016
|
257
257
|
description: Testbot is a test distribution tool that works with Rails, RSpec, RSpec2, Test::Unit and Cucumber.
|
258
258
|
email:
|
259
259
|
- joakim.kolsjo@gmail.com
|