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 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.
@@ -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.7'
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)
@@ -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(' '),
@@ -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, :requester_mac
5
+ attr_reader :root, :project, :build_id
6
6
 
7
- def initialize(runner, id, requester_mac, project, root, type, ruby_interpreter, files)
8
- @runner, @id, @requester_mac, @project, @root, @type, @ruby_interpreter, @files =
9
- runner, id, requester_mac, project, root, type, ruby_interpreter, files
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} from #{@requester_mac}... "
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};"
@@ -33,7 +33,7 @@ module Testbot::Runner
33
33
 
34
34
  def initialize(config)
35
35
  @instances = []
36
- @last_requester_mac = nil
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 requester at a time
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!({ :requester_mac => @last_requester_mac })
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
- @last_requester_mac = nil
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 first_job_from_requester?
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
- @last_requester_mac = job.requester_mac
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 first_job_from_requester?
135
- @last_requester_mac == nil
134
+ def first_job_from_build?
135
+ @last_build_id == nil
136
136
  end
137
137
 
138
138
  def time_for_update?
@@ -21,7 +21,6 @@ module Testbot::Server
21
21
  :root => self.root,
22
22
  :project => self.project,
23
23
  :type => self.type,
24
- :requester_mac => self.requester_mac,
25
24
  :build => self,
26
25
  :jruby => self.jruby)
27
26
  end
@@ -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| [ "requester_mac", "no_jruby" ].include?(k) }
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["requester_mac"], params["no_jruby"]), runner ]
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(requester_mac, no_jruby)
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
- (requester_mac ? j.requester_mac == requester_mac : true) &&
30
+ (build_id ? j.build.id.to_s == build_id : true) &&
31
31
  (no_jruby ? j.jruby != 1 : true)
32
32
  }
33
33
 
@@ -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.requester_mac, next_job.project, next_job.root, next_job.type, (next_job.jruby == 1 ? 'jruby' : 'ruby'), next_job.files ].join(',')
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
 
@@ -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.7"
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
- :requester_mac=>"00:01:..", :sizes=>"0", :project=>"project" }
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')
@@ -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%", :requester_mac => "bb:bb:bb:bb:bb:bb", :project => 'things', :sizes => "10 20", :jruby => false
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%", :requester_mac => "bb:bb:bb:bb:bb:bb", :project => 'things', :sizes => "1 1 1 1", :jruby => true
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
- job1 = Job.create :files => 'spec/models/car_spec.rb', :root => 'server:/project', :type => 'spec', :requester_mac => "bb:bb:bb:bb:bb:bb", :project => 'things', :jruby => 1
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, "bb:bb:bb:bb:bb:bb", "things", "server:/project", "spec", "jruby", "spec/models/car_spec.rb" ].join(','), last_response.body
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
- job1 = Job.create :files => 'spec/models/car_spec.rb', :taken_at => Time.now, :type => 'spec'
117
- job2 = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :requester_mac => "aa:aa:aa:aa:aa:aa", :project => 'things', :jruby => 0
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, "aa:aa:aa:aa:aa:aa", "things", "server:/project", "spec", "ruby", "spec/models/house_spec.rb" ].join(','), last_response.body
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', :requester_mac => "aa:aa:aa:aa:aa:aa"
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
- job1 = Job.create :files => 'spec/models/car_spec.rb', :type => 'spec', :requester_mac => "bb:bb:bb:bb:bb:bb"
164
- get '/jobs/next', :version => Testbot.version, :uid => "00:..."
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', :requester_mac => "aa:aa:aa:aa:aa:aa"
168
- get '/jobs/next', :version => Testbot.version, :uid => "00:...", :requester_mac => "bb:bb:bb:bb:bb:bb"
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
- job1 = Job.create :files => 'spec/models/car_spec.rb', :type => 'spec', :requester_mac => "bb:bb:bb:bb:bb:bb", :jruby => 1
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', :requester_mac => "bb:bb:bb:bb:bb:bb", :jruby => 1
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 requester right away" do
199
- 20.times { Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :requester_mac => "bb:bb:bb:bb:bb:bb" }
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', :requester_mac => "aa:aa:aa:aa:aa:aa" }
204
+ 20.times { Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :build => build2 }
202
205
 
203
- macs = (0...10).map {
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 macs.find { |mac| mac == 'bb:bb:bb:bb:bb:bb' }
209
- assert macs.find { |mac| mac == 'aa:aa:aa:aa:aa:aa' }
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 requester" do
213
- 20.times { Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :requester_mac => "bb:bb:bb:bb:bb:bb" }
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', :requester_mac => "bb:bb:bb:bb:bb:bb" }
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:...", :requester_mac => "bb:bb:bb:bb:bb:bb"
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
- old_taken_job = Job.create :files => 'spec/models/house_spec.rb', :root => 'server:/project', :type => 'spec', :requester_mac => "aa:aa:aa:aa:aa:aa", :taken_by => missing_runner, :taken_at => Time.now - 30, :project => 'things'
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, "aa:aa:aa:aa:aa:aa", "things", "server:/project", "spec", "ruby", "spec/models/house_spec.rb" ].join(','), last_response.body
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: 5
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 7
10
- version: 0.5.7
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-19 00:00:00 +02:00
18
+ date: 2011-06-29 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: sinatra
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
- version_requirements: *id001
36
+ requirement: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- name: httparty
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
- version_requirements: *id002
52
+ requirement: *id002
53
53
  - !ruby/object:Gem::Dependency
54
- name: macaddr
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
- version_requirements: *id003
68
+ requirement: *id003
69
69
  - !ruby/object:Gem::Dependency
70
- name: net-ssh
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
- version_requirements: *id004
84
+ requirement: *id004
85
85
  - !ruby/object:Gem::Dependency
86
- name: json_pure
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
- version_requirements: *id005
100
+ requirement: *id005
101
101
  - !ruby/object:Gem::Dependency
102
- name: daemons
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
- version_requirements: *id006
116
+ requirement: *id006
117
117
  - !ruby/object:Gem::Dependency
118
- name: acts_as_rails3_generator
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
- version_requirements: *id007
130
+ requirement: *id007
131
131
  - !ruby/object:Gem::Dependency
132
- name: shoulda
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
- version_requirements: *id008
144
+ requirement: *id008
145
145
  - !ruby/object:Gem::Dependency
146
- name: rack-test
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
- version_requirements: *id009
158
+ requirement: *id009
159
159
  - !ruby/object:Gem::Dependency
160
- name: flexmock
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
- version_requirements: *id010
172
+ requirement: *id010
173
173
  - !ruby/object:Gem::Dependency
174
- name: cucumber
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
- version_requirements: *id011
186
+ requirement: *id011
187
187
  - !ruby/object:Gem::Dependency
188
- name: rvm
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
- version_requirements: *id012
200
+ requirement: *id012
201
201
  - !ruby/object:Gem::Dependency
202
- name: rake
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
- version_requirements: *id013
214
+ requirement: *id013
215
215
  - !ruby/object:Gem::Dependency
216
- name: bundler
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
- version_requirements: *id014
228
+ requirement: *id014
229
229
  - !ruby/object:Gem::Dependency
230
- name: guard
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
- version_requirements: *id015
242
+ requirement: *id015
243
243
  - !ruby/object:Gem::Dependency
244
- name: guard-test
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
- version_requirements: *id016
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