testbot 0.5.7 → 0.5.8
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/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
|