rspec-multiprocess_runner 1.2.3 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +48 -0
- data/exe/multirspec +1 -13
- data/lib/rspec/multiprocess_runner/command_line_options.rb +6 -2
- data/lib/rspec/multiprocess_runner/coordinator.rb +53 -58
- data/lib/rspec/multiprocess_runner/file_coordinator.rb +12 -14
- data/lib/rspec/multiprocess_runner/version.rb +1 -1
- data/lib/rspec/multiprocess_runner/worker.rb +8 -10
- data/rspec-multiprocess_runner.gemspec +5 -5
- metadata +12 -11
- data/.gitignore +0 -13
- data/.rspec +0 -2
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2f561425e9f9c62eba1610b84278f1f3d86a5448d0c671324125bb88c0150f81
|
4
|
+
data.tar.gz: 3b79c2b0e07224cc2fe64204b0adf5e7ca90099846e84cc2078ad771c617c05d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea71c613e8309da1d384f2c04778dce6871131bfa623ab4edabd4df6226d3393b39b6a1d3f688146881827650c56490a5b688139ba5c8bbcb76a199bced318d5
|
7
|
+
data.tar.gz: 0db27a58d409e7485c4c4ae934f59f53ea86d63fa2125194813fbbefdd28f39db90ea59355cf205e6b39610f344b99447d112d72adc293a12b303f29b2df1f1c
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rspec-multiprocess_runner (1.3.0)
|
5
|
+
rspec (>= 3.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
byebug (11.0.1)
|
11
|
+
coderay (1.1.2)
|
12
|
+
diff-lcs (1.3)
|
13
|
+
method_source (0.9.2)
|
14
|
+
pry (0.12.2)
|
15
|
+
coderay (~> 1.1.0)
|
16
|
+
method_source (~> 0.9.0)
|
17
|
+
pry-byebug (3.7.0)
|
18
|
+
byebug (~> 11.0)
|
19
|
+
pry (~> 0.10)
|
20
|
+
rake (10.5.0)
|
21
|
+
rspec (3.8.0)
|
22
|
+
rspec-core (~> 3.8.0)
|
23
|
+
rspec-expectations (~> 3.8.0)
|
24
|
+
rspec-mocks (~> 3.8.0)
|
25
|
+
rspec-core (3.8.2)
|
26
|
+
rspec-support (~> 3.8.0)
|
27
|
+
rspec-expectations (3.8.5)
|
28
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
+
rspec-support (~> 3.8.0)
|
30
|
+
rspec-mocks (3.8.2)
|
31
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
32
|
+
rspec-support (~> 3.8.0)
|
33
|
+
rspec-support (3.8.3)
|
34
|
+
stub_env (1.0.4)
|
35
|
+
rspec (>= 2.0, < 4.0)
|
36
|
+
|
37
|
+
PLATFORMS
|
38
|
+
ruby
|
39
|
+
|
40
|
+
DEPENDENCIES
|
41
|
+
bundler (>= 1.10)
|
42
|
+
pry-byebug
|
43
|
+
rake (~> 10.0)
|
44
|
+
rspec-multiprocess_runner!
|
45
|
+
stub_env
|
46
|
+
|
47
|
+
BUNDLED WITH
|
48
|
+
2.0.2
|
data/exe/multirspec
CHANGED
@@ -9,19 +9,7 @@ exit(64) unless options
|
|
9
9
|
coordinator = RSpec::MultiprocessRunner::Coordinator.new(
|
10
10
|
options.worker_count,
|
11
11
|
options.files_to_run,
|
12
|
-
|
13
|
-
file_timeout_seconds: options.file_timeout_seconds,
|
14
|
-
example_timeout_seconds: options.example_timeout_seconds,
|
15
|
-
test_env_number_first_is_1: options.first_is_1,
|
16
|
-
rspec_options: options.rspec_options,
|
17
|
-
log_failing_files: options.log_failing_files,
|
18
|
-
use_given_order: options.use_given_order,
|
19
|
-
head_node: options.head_node,
|
20
|
-
port: options.port,
|
21
|
-
hostname: options.hostname,
|
22
|
-
max_nodes: options.max_nodes,
|
23
|
-
run_identifier: options.run_identifier
|
24
|
-
}
|
12
|
+
options
|
25
13
|
)
|
26
14
|
|
27
15
|
trap("INT") do
|
@@ -3,12 +3,11 @@ require 'optparse'
|
|
3
3
|
require 'pathname'
|
4
4
|
|
5
5
|
module RSpec::MultiprocessRunner
|
6
|
-
# @private
|
7
6
|
class CommandLineOptions
|
8
7
|
attr_accessor :worker_count, :file_timeout_seconds, :example_timeout_seconds,
|
9
8
|
:rspec_options, :explicit_files_or_directories, :pattern, :log_failing_files,
|
10
9
|
:first_is_1, :use_given_order, :port, :head_node, :hostname, :max_nodes,
|
11
|
-
:run_identifier
|
10
|
+
:run_identifier, :summary_filename
|
12
11
|
|
13
12
|
DEFAULT_WORKER_COUNT = 3
|
14
13
|
|
@@ -25,6 +24,7 @@ module RSpec::MultiprocessRunner
|
|
25
24
|
self.hostname = "localhost"
|
26
25
|
self.head_node = true
|
27
26
|
self.max_nodes = 5
|
27
|
+
self.summary_filename = nil
|
28
28
|
end
|
29
29
|
|
30
30
|
def parse(command_line_args, error_stream=$stderr)
|
@@ -144,6 +144,10 @@ module RSpec::MultiprocessRunner
|
|
144
144
|
self.run_identifier = string
|
145
145
|
end
|
146
146
|
|
147
|
+
parser.on("-f", "--summary-filename STRING", "Save summary to a file") do |string|
|
148
|
+
self.summary_filename = string
|
149
|
+
end
|
150
|
+
|
147
151
|
parser.on_tail("-h", "--help", "Prints this help") do
|
148
152
|
help_requested!
|
149
153
|
end
|
@@ -5,13 +5,10 @@ require 'rspec/multiprocess_runner/file_coordinator'
|
|
5
5
|
|
6
6
|
module RSpec::MultiprocessRunner
|
7
7
|
class Coordinator
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@test_env_number_first_is_1 = options[:test_env_number_first_is_1]
|
13
|
-
@log_failing_files = options[:log_failing_files]
|
14
|
-
@rspec_options = options[:rspec_options]
|
8
|
+
attr_accessor :options
|
9
|
+
|
10
|
+
def initialize(worker_count, files, options)
|
11
|
+
self.options = options
|
15
12
|
@file_buffer = []
|
16
13
|
@workers = []
|
17
14
|
@stopped_workers = []
|
@@ -55,10 +52,10 @@ module RSpec::MultiprocessRunner
|
|
55
52
|
end_workers_in_parallel(@workers.dup, :kill_now)
|
56
53
|
else
|
57
54
|
@shutting_down = true
|
58
|
-
print "Shutting down #{pluralize(@workers.size, "worker")} …" if options
|
55
|
+
print "Shutting down #{pluralize(@workers.size, "worker")} …" if options.print_summary
|
59
56
|
# end_workers_in_parallel modifies @workers, so dup before sending in
|
60
57
|
end_workers_in_parallel(@workers.dup, :shutdown_now)
|
61
|
-
if options
|
58
|
+
if options.print_summary
|
62
59
|
puts " done"
|
63
60
|
print_summary
|
64
61
|
end
|
@@ -175,19 +172,13 @@ module RSpec::MultiprocessRunner
|
|
175
172
|
end
|
176
173
|
|
177
174
|
def expected_worker_numbers
|
178
|
-
(1
|
175
|
+
(1..options.worker_count).to_a
|
179
176
|
end
|
180
177
|
|
181
178
|
def create_and_start_worker_if_necessary(n)
|
182
179
|
if work_left_to_do?
|
183
180
|
$stderr.puts "(Re)starting worker #{n}"
|
184
|
-
new_worker = Worker.new(
|
185
|
-
n,
|
186
|
-
file_timeout_seconds: @file_timeout_seconds,
|
187
|
-
example_timeout_seconds: @example_timeout_seconds,
|
188
|
-
rspec_options: @rspec_options,
|
189
|
-
test_env_number_first_is_1: @test_env_number_first_is_1
|
190
|
-
)
|
181
|
+
new_worker = Worker.new(n, options)
|
191
182
|
@workers << new_worker
|
192
183
|
new_worker.start
|
193
184
|
file = get_file
|
@@ -196,7 +187,7 @@ module RSpec::MultiprocessRunner
|
|
196
187
|
end
|
197
188
|
|
198
189
|
def start_missing_workers
|
199
|
-
if @workers.size <
|
190
|
+
if @workers.size < options.worker_count && work_left_to_do?
|
200
191
|
running_process_numbers = @workers.map(&:environment_number)
|
201
192
|
missing_process_numbers = expected_worker_numbers - running_process_numbers
|
202
193
|
missing_process_numbers.each do |n|
|
@@ -218,16 +209,20 @@ module RSpec::MultiprocessRunner
|
|
218
209
|
idx[result.status] << result
|
219
210
|
end
|
220
211
|
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
212
|
+
outputs = [STDOUT]
|
213
|
+
outputs << File.new(options.summary_filename, 'w') if (options.summary_filename)
|
214
|
+
outputs.each do |output|
|
215
|
+
print_skipped_files_details(output)
|
216
|
+
print_pending_example_details(output, by_status_and_time["pending"])
|
217
|
+
print_failed_example_details(output, by_status_and_time["failed"])
|
218
|
+
print_missing_files(output)
|
219
|
+
log_failed_files(by_status_and_time["failed"].map(&:filename).uniq + @file_coordinator.missing_files.to_a) if options.log_failing_files
|
220
|
+
print_failed_process_details(output)
|
221
|
+
output.puts
|
222
|
+
print_elapsed_time(output, elapsed)
|
223
|
+
output.puts failed? ? "FAILURE" : "SUCCESS"
|
224
|
+
print_example_counts(output, by_status_and_time)
|
225
|
+
end
|
231
226
|
end
|
232
227
|
|
233
228
|
def combine_example_results
|
@@ -238,41 +233,41 @@ module RSpec::MultiprocessRunner
|
|
238
233
|
@file_coordinator.results.detect { |r| r.status == "failed" }
|
239
234
|
end
|
240
235
|
|
241
|
-
def print_skipped_files_details
|
236
|
+
def print_skipped_files_details(output)
|
242
237
|
return if !work_left_to_do?
|
243
|
-
puts
|
244
|
-
puts "Skipped files:"
|
238
|
+
output.puts
|
239
|
+
output.puts "Skipped files:"
|
245
240
|
@file_coordinator.remaining_files.each do |spec_file|
|
246
|
-
puts " - #{spec_file}"
|
241
|
+
output.puts " - #{spec_file}"
|
247
242
|
end
|
248
243
|
end
|
249
244
|
|
250
|
-
def print_pending_example_details(pending_example_results)
|
245
|
+
def print_pending_example_details(output, pending_example_results)
|
251
246
|
return if pending_example_results.nil?
|
252
|
-
puts
|
253
|
-
puts "Pending:"
|
247
|
+
output.puts
|
248
|
+
output.puts "Pending:"
|
254
249
|
pending_example_results.each do |pending|
|
255
|
-
puts
|
256
|
-
puts pending.details.sub(/^\s*Pending:\s*/, '')
|
250
|
+
output.puts
|
251
|
+
output.puts pending.details.sub(/^\s*Pending:\s*/, '')
|
257
252
|
end
|
258
253
|
end
|
259
254
|
|
260
|
-
def print_failed_example_details(failed_example_results)
|
255
|
+
def print_failed_example_details(output, failed_example_results)
|
261
256
|
return if failed_example_results.nil?
|
262
|
-
puts
|
263
|
-
puts "Failures:"
|
257
|
+
output.puts
|
258
|
+
output.puts "Failures:"
|
264
259
|
failed_example_results.each_with_index do |failure, i|
|
265
|
-
puts
|
266
|
-
puts " #{i.next}) #{failure.description}"
|
267
|
-
puts failure.details
|
260
|
+
output.puts
|
261
|
+
output.puts " #{i.next}) #{failure.description}"
|
262
|
+
output.puts failure.details
|
268
263
|
end
|
269
264
|
end
|
270
265
|
|
271
266
|
def log_failed_files(failed_files)
|
272
267
|
return if failed_files.nil?
|
273
|
-
puts
|
274
|
-
puts "Writing failures to file: #{
|
275
|
-
File.open(
|
268
|
+
output.puts
|
269
|
+
output.puts "Writing failures to file: #{options.log_failing_files}"
|
270
|
+
File.open(options.log_failing_files, "w+") do |io|
|
276
271
|
failed_files.each do |file|
|
277
272
|
io << file
|
278
273
|
io << "\n"
|
@@ -285,7 +280,7 @@ module RSpec::MultiprocessRunner
|
|
285
280
|
"#{count} #{string}#{'s' unless count.to_f == 1}"
|
286
281
|
end
|
287
282
|
|
288
|
-
def print_example_counts(by_status_and_time)
|
283
|
+
def print_example_counts(output, by_status_and_time)
|
289
284
|
example_count = by_status_and_time.map { |status, results| results.size }.inject(0) { |sum, ct| sum + ct }
|
290
285
|
failure_count = by_status_and_time["failed"] ? by_status_and_time["failed"].size : 0
|
291
286
|
pending_count = by_status_and_time["pending"] ? by_status_and_time["pending"].size : 0
|
@@ -300,26 +295,26 @@ module RSpec::MultiprocessRunner
|
|
300
295
|
summary << ", " << pluralize(process_failure_count, "failed proc") if process_failure_count > 0
|
301
296
|
summary << ", " << pluralize(skipped_count, "skipped file") if skipped_count > 0
|
302
297
|
summary << ", " << pluralize(missing_count, "missing file") if missing_count > 0
|
303
|
-
puts summary
|
298
|
+
output.puts summary
|
304
299
|
end
|
305
300
|
|
306
|
-
def print_failed_process_details
|
301
|
+
def print_failed_process_details(output)
|
307
302
|
return if failed_workers.empty?
|
308
|
-
puts
|
309
|
-
puts "Failed processes:"
|
303
|
+
output.puts
|
304
|
+
output.puts "Failed processes:"
|
310
305
|
failed_workers.each do |worker|
|
311
|
-
puts " - #{worker.node}:#{worker.pid} (env #{worker.environment_number}) #{worker.deactivation_reason} on #{worker.current_file}"
|
306
|
+
output.puts " - #{worker.node}:#{worker.pid} (env #{worker.environment_number}) #{worker.deactivation_reason} on #{worker.current_file}"
|
312
307
|
end
|
313
308
|
end
|
314
309
|
|
315
|
-
def print_missing_files
|
310
|
+
def print_missing_files(output)
|
316
311
|
return if @file_coordinator.missing_files.empty?
|
317
|
-
puts
|
318
|
-
puts "Missing files from disconnects:"
|
319
|
-
@file_coordinator.missing_files.each { |file| puts " + #{file} was given to a node, which disconnected" }
|
312
|
+
output.puts
|
313
|
+
output.puts "Missing files from disconnects:"
|
314
|
+
@file_coordinator.missing_files.each { |file| output.puts " + #{file} was given to a node, which disconnected" }
|
320
315
|
end
|
321
316
|
|
322
|
-
def print_elapsed_time(seconds_elapsed)
|
317
|
+
def print_elapsed_time(output, seconds_elapsed)
|
323
318
|
minutes = seconds_elapsed.to_i / 60
|
324
319
|
seconds = seconds_elapsed % 60
|
325
320
|
m =
|
@@ -330,7 +325,7 @@ module RSpec::MultiprocessRunner
|
|
330
325
|
if seconds > 0
|
331
326
|
"%.2f second%s" % [seconds, seconds == 1 ? '' : 's']
|
332
327
|
end
|
333
|
-
puts "Finished in #{[m, s].compact.join(", ")}"
|
328
|
+
output.puts "Finished in #{[m, s].compact.join(", ")}"
|
334
329
|
end
|
335
330
|
end
|
336
331
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'rspec/multiprocess_runner'
|
3
3
|
require 'socket'
|
4
|
+
require 'set'
|
4
5
|
|
5
6
|
module RSpec::MultiprocessRunner
|
6
7
|
class FileCoordinator
|
7
8
|
attr_reader :results, :failed_workers
|
9
|
+
attr_accessor :options
|
8
10
|
|
9
11
|
COMMAND_FILE = "file"
|
10
12
|
COMMAND_RESULTS = "results"
|
@@ -17,14 +19,10 @@ module RSpec::MultiprocessRunner
|
|
17
19
|
@results = Set.new
|
18
20
|
@threads = []
|
19
21
|
@failed_workers = []
|
22
|
+
self.options = options
|
20
23
|
@spec_files_reference = files.to_set
|
21
|
-
|
22
|
-
|
23
|
-
@max_threads = options[:max_nodes]
|
24
|
-
@head_node = options[:head_node]
|
25
|
-
@start_string = options[:run_identifier]
|
26
|
-
if @head_node
|
27
|
-
@spec_files = options[:use_given_order] ? files : sort_files(files)
|
24
|
+
if options.head_node
|
25
|
+
@spec_files = options.use_given_order ? files : sort_files(files)
|
28
26
|
Thread.start { run_tcp_server }
|
29
27
|
@node_socket, head_node_socket = Socket.pair(:UNIX, :STREAM)
|
30
28
|
Thread.start { server_connection_established(head_node_socket) }
|
@@ -32,7 +30,7 @@ module RSpec::MultiprocessRunner
|
|
32
30
|
count = 100
|
33
31
|
while @node_socket.nil? do
|
34
32
|
begin
|
35
|
-
@node_socket = TCPSocket.new
|
33
|
+
@node_socket = TCPSocket.new options.hostname, options.port
|
36
34
|
raise unless start?
|
37
35
|
rescue BadStartStringError
|
38
36
|
@node_socket.close if @node_socket
|
@@ -55,7 +53,7 @@ module RSpec::MultiprocessRunner
|
|
55
53
|
end
|
56
54
|
|
57
55
|
def missing_files
|
58
|
-
if
|
56
|
+
if options.head_node
|
59
57
|
@spec_files_reference - @results.map(&:filename) - @failed_workers.map(&:current_file) - @spec_files
|
60
58
|
else
|
61
59
|
[]
|
@@ -85,7 +83,7 @@ module RSpec::MultiprocessRunner
|
|
85
83
|
end
|
86
84
|
|
87
85
|
def finished
|
88
|
-
if
|
86
|
+
if options.head_node
|
89
87
|
if @tcp_server_running
|
90
88
|
@tcp_server_running = false
|
91
89
|
@threads.each(&:join)
|
@@ -108,10 +106,10 @@ module RSpec::MultiprocessRunner
|
|
108
106
|
end
|
109
107
|
|
110
108
|
def run_tcp_server
|
111
|
-
server = TCPServer.new
|
109
|
+
server = TCPServer.new options.port
|
112
110
|
@tcp_server_running = true
|
113
111
|
ObjectSpace.define_finalizer( self, proc { server.close } )
|
114
|
-
while @threads.size <
|
112
|
+
while @threads.size < options.max_nodes && @tcp_server_running
|
115
113
|
@threads << Thread.start(server.accept) do |client|
|
116
114
|
server_connection_established(client) if @tcp_server_running
|
117
115
|
end
|
@@ -124,7 +122,7 @@ module RSpec::MultiprocessRunner
|
|
124
122
|
break unless raw_response
|
125
123
|
command, results, node = JSON.parse(raw_response)
|
126
124
|
if command == COMMAND_START
|
127
|
-
if results ==
|
125
|
+
if results == options.start_string
|
128
126
|
socket.puts COMMAND_START
|
129
127
|
else
|
130
128
|
socket.puts COMMAND_FINISHED
|
@@ -145,7 +143,7 @@ module RSpec::MultiprocessRunner
|
|
145
143
|
|
146
144
|
def start?
|
147
145
|
begin
|
148
|
-
@node_socket.puts [COMMAND_START,
|
146
|
+
@node_socket.puts [COMMAND_START, options.start_string].to_json
|
149
147
|
response = @node_socket.gets
|
150
148
|
response = response.chomp if response
|
151
149
|
raise BadStartStringError if response == COMMAND_FINISHED
|
@@ -22,7 +22,7 @@ module RSpec::MultiprocessRunner
|
|
22
22
|
# @private
|
23
23
|
class Worker
|
24
24
|
attr_reader :pid, :environment_number, :example_results, :current_file
|
25
|
-
attr_accessor :deactivation_reason
|
25
|
+
attr_accessor :deactivation_reason, :options
|
26
26
|
|
27
27
|
COMMAND_QUIT = "quit"
|
28
28
|
COMMAND_RUN_FILE = "run_file"
|
@@ -33,10 +33,8 @@ module RSpec::MultiprocessRunner
|
|
33
33
|
def initialize(environment_number, options)
|
34
34
|
@environment_number = environment_number
|
35
35
|
@worker_socket, @coordinator_socket = Socket.pair(:UNIX, :STREAM)
|
36
|
-
@rspec_arguments = (options
|
37
|
-
|
38
|
-
@file_timeout_seconds = options[:file_timeout_seconds]
|
39
|
-
@test_env_number_first_is_1 = options[:test_env_number_first_is_1]
|
36
|
+
@rspec_arguments = (options.rspec_options || []) + ["--format", ReportingFormatter.to_s]
|
37
|
+
self.options = options
|
40
38
|
@example_results = []
|
41
39
|
end
|
42
40
|
|
@@ -52,7 +50,7 @@ module RSpec::MultiprocessRunner
|
|
52
50
|
end
|
53
51
|
|
54
52
|
def test_env_number
|
55
|
-
if environment_number == 1 &&
|
53
|
+
if environment_number == 1 && !options.first_is_1
|
56
54
|
""
|
57
55
|
else
|
58
56
|
environment_number.to_s
|
@@ -120,12 +118,12 @@ module RSpec::MultiprocessRunner
|
|
120
118
|
|
121
119
|
def stalled?
|
122
120
|
file_stalled =
|
123
|
-
if
|
124
|
-
working? && (Time.now - @current_file_started_at >
|
121
|
+
if options.file_timeout_seconds
|
122
|
+
working? && (Time.now - @current_file_started_at > options.file_timeout_seconds)
|
125
123
|
end
|
126
124
|
example_stalled =
|
127
|
-
if
|
128
|
-
working? && (Time.now - @current_example_started_at >
|
125
|
+
if options.example_timeout_seconds
|
126
|
+
working? && (Time.now - @current_example_started_at > options.example_timeout_seconds)
|
129
127
|
end
|
130
128
|
file_stalled || example_stalled
|
131
129
|
end
|
@@ -6,21 +6,21 @@ require 'rspec/multiprocess_runner/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "rspec-multiprocess_runner"
|
8
8
|
spec.version = RSpec::MultiprocessRunner::VERSION
|
9
|
-
spec.authors = ["Rhett Sutphin"]
|
10
|
-
spec.email = ["
|
9
|
+
spec.authors = ["Rhett Sutphin", 'Jacob Bloom', 'Peter Nyberg', 'Kurt Werle']
|
10
|
+
spec.email = ["rspec-multiprocess_runner@collaborativedrug.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{A runner for RSpec 3 that uses multiple processes to execute specs in parallel}
|
13
13
|
spec.homepage = "https://github.com/cdd/rspec-multiprocess_runner"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
|
-
spec.files =
|
16
|
+
spec.files = Dir.glob('{bin,lib,exe}/**/*') + %w[rspec-multiprocess_runner.gemspec Gemfile Gemfile.lock Rakefile CHANGELOG.md LICENSE.txt README.md TODO.md]
|
17
17
|
spec.bindir = "exe"
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "rspec", ">=
|
21
|
+
spec.add_dependency "rspec", ">= 3.0"
|
22
22
|
|
23
|
-
spec.add_development_dependency "bundler", "
|
23
|
+
spec.add_development_dependency "bundler", ">= 1.10"
|
24
24
|
spec.add_development_dependency "pry-byebug"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency "stub_env"
|
metadata
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-multiprocess_runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rhett Sutphin
|
8
|
+
- Jacob Bloom
|
9
|
+
- Peter Nyberg
|
10
|
+
- Kurt Werle
|
8
11
|
autorequire:
|
9
12
|
bindir: exe
|
10
13
|
cert_chain: []
|
11
|
-
date:
|
14
|
+
date: 2019-10-02 00:00:00.000000000 Z
|
12
15
|
dependencies:
|
13
16
|
- !ruby/object:Gem::Dependency
|
14
17
|
name: rspec
|
@@ -16,26 +19,26 @@ dependencies:
|
|
16
19
|
requirements:
|
17
20
|
- - ">="
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
22
|
+
version: '3.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
29
|
+
version: '3.0'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: bundler
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
30
33
|
requirements:
|
31
|
-
- - "
|
34
|
+
- - ">="
|
32
35
|
- !ruby/object:Gem::Version
|
33
36
|
version: '1.10'
|
34
37
|
type: :development
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- - "
|
41
|
+
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '1.10'
|
41
44
|
- !ruby/object:Gem::Dependency
|
@@ -82,17 +85,15 @@ dependencies:
|
|
82
85
|
version: '0'
|
83
86
|
description:
|
84
87
|
email:
|
85
|
-
-
|
88
|
+
- rspec-multiprocess_runner@collaborativedrug.com
|
86
89
|
executables:
|
87
90
|
- multirspec
|
88
91
|
extensions: []
|
89
92
|
extra_rdoc_files: []
|
90
93
|
files:
|
91
|
-
- ".gitignore"
|
92
|
-
- ".rspec"
|
93
|
-
- ".travis.yml"
|
94
94
|
- CHANGELOG.md
|
95
95
|
- Gemfile
|
96
|
+
- Gemfile.lock
|
96
97
|
- LICENSE.txt
|
97
98
|
- README.md
|
98
99
|
- Rakefile
|
@@ -131,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
132
|
version: '0'
|
132
133
|
requirements: []
|
133
134
|
rubyforge_project:
|
134
|
-
rubygems_version: 2.
|
135
|
+
rubygems_version: 2.7.6.2
|
135
136
|
signing_key:
|
136
137
|
specification_version: 4
|
137
138
|
summary: A runner for RSpec 3 that uses multiple processes to execute specs in parallel
|
data/.gitignore
DELETED
data/.rspec
DELETED