hoe 3.26.0 → 4.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3cc28399dd8b7e10dc915b12bc3a9aba7baf0948753f52ad292cbfecf24929a
4
- data.tar.gz: 5fb0f5df02f4597b4229f685707a4e27a977c6df70be287a24698e381ac71095
3
+ metadata.gz: 59df54d9f8fe0c2c52e71f8fb63f492924a5f10e2a5fd6cb9246adbe14a49ebe
4
+ data.tar.gz: 8c0800c24176f4b2285b2f2d4283014dcb3c06a5951cc881b98d8c802070e81b
5
5
  SHA512:
6
- metadata.gz: 9c8fa5004607a777baff624078e9fcac387afa84c356b872970a684241314249bc6751b979662abbabe6e36301c389605544c9d7637253d81c981d21ef1a3ab2
7
- data.tar.gz: 74db46687d2d171cae8a7d469f26167e878e403d27c85631b23828b6842fbe053357e965158c4deef4b78b8b5ae07f96cfba9dacffd47ff5308cd9580b5a483f
6
+ metadata.gz: 04f3f8733c99aa5aa427a7c74e8afe126b5bcad496f0b9acd3bd8793fcf167c3e78aad2b0acc789a92eca77f97f12526029a37afa2a8fe3a246b2a3c79a28bfb
7
+ data.tar.gz: 1a475a4a4288b64d8816ba8d093af3da57195165606462752060b65daf93567640992ed1517da756d52bc836703195137e67d8478d37b9a671367e0092ad60a1
checksums.yaml.gz.sig CHANGED
@@ -1 +1,3 @@
1
- Xa�/j��|�tYW���"����`���^���{��3���@CΒ!��'��r+��tၮQLv k�ֱc��4$�C��H(Bk���|�O�����:ŧ�42��wC������R��w=U57�_x_�'��z������-�X����O-����O���u�u��!���*��;J�7�^�����g��I#�������"����zg>��n��bK� ��sϧ�N!I4v��Y��V%�FPG�����, ��/
1
+ ��D.���k�;���'���Pf����E)��X���w'�;�[���i@���=��0����N'�[(�����пf�Y�� �>�r?��BE*�\�h;€t�Ͼ��T�T�' JظG
2
+ �n"Z��w��S�h�\�&��u��h�8��2^nJ���hc�6L�$S[*.u�� N�)�٥XTY��%��T �7�BWF���^/�����H��r _
3
+ I�+6<�X��w�){S"�PT ���YV��^azk�x
data/Manifest.txt CHANGED
@@ -24,7 +24,6 @@ lib/hoe/rake.rb
24
24
  lib/hoe/rdoc.rb
25
25
  lib/hoe/signing.rb
26
26
  lib/hoe/test.rb
27
- lib/minitest/test_task.rb
28
27
  template/.autotest.erb
29
28
  template/History.txt.erb
30
29
  template/Manifest.txt.erb
data/lib/hoe/test.rb CHANGED
@@ -10,17 +10,10 @@
10
10
  # test_deps:: Show which test files fail when run alone.
11
11
 
12
12
  module Hoe::Test
13
- def deprecate msg # :nodoc:
14
- where = caller_locations[1]
15
-
16
- warn "DEPRECATED: %s from %s" % [msg, where]
17
- end
18
-
19
13
  ##
20
14
  # Configuration for the supported test frameworks for test task.
21
15
 
22
16
  SUPPORTED_TEST_FRAMEWORKS = {
23
- :testunit => "test/unit",
24
17
  :minitest => "minitest/autorun",
25
18
  :none => nil,
26
19
  }
@@ -46,16 +39,6 @@ module Hoe::Test
46
39
 
47
40
  attr_accessor :test_prelude
48
41
 
49
- ##
50
- # Optional: RSpec dirs. [default: %w(spec lib)]
51
-
52
- attr_accessor :rspec_dirs
53
-
54
- ##
55
- # Optional: RSpec options. [default: []]
56
-
57
- attr_accessor :rspec_options
58
-
59
42
  ##
60
43
  # The test task created for this plugin.
61
44
 
@@ -68,8 +51,7 @@ module Hoe::Test
68
51
  self.multiruby_skip ||= []
69
52
  self.testlib ||= :minitest
70
53
  self.test_prelude ||= nil
71
- self.rspec_dirs ||= %w[spec lib]
72
- self.rspec_options ||= []
54
+ self.test_task = nil
73
55
  end
74
56
 
75
57
  ##
@@ -83,44 +65,13 @@ module Hoe::Test
83
65
  if File.directory? "test" then
84
66
  case testlib
85
67
  when :minitest then
86
- require "minitest/test_task" # currently in hoe, but will move
68
+ require "minitest/test_task" # in minitest 5.16+
87
69
 
88
70
  test_prelude = self.test_prelude
89
71
  self.test_task = Minitest::TestTask.create :test do |t|
90
72
  t.test_prelude = test_prelude
91
73
  t.libs.prepend Hoe.include_dirs.uniq
92
74
  end
93
- when :testunit then
94
- desc "Run the test suite. Use FILTER or TESTOPTS to add flags/args."
95
- task :test do
96
- ruby make_test_cmd
97
- end
98
-
99
- desc "Print out the test command. Good for profiling and other tools."
100
- task :test_cmd do
101
- puts make_test_cmd
102
- end
103
-
104
- desc "Show which test files fail when run alone."
105
- task :test_deps do
106
- tests = Dir[*self.test_globs].uniq
107
-
108
- paths = %w[bin lib test].join(File::PATH_SEPARATOR)
109
- null_dev = Hoe::WINDOZE ? "> NUL 2>&1" : "> /dev/null 2>&1"
110
-
111
- tests.each do |test|
112
- unless system "ruby -I#{paths} #{test} #{null_dev}" then
113
- puts "Dependency Issues: #{test}"
114
- end
115
- end
116
- end
117
-
118
- if testlib == :minitest then
119
- desc "Show bottom 25 tests wrt time."
120
- task "test:slow" do
121
- sh "rake TESTOPTS=-v | sort -n -k2 -t= | tail -25"
122
- end
123
- end
124
75
  when :none then
125
76
  # do nothing
126
77
  else
@@ -140,16 +91,6 @@ module Hoe::Test
140
91
  default_tasks << :test
141
92
  end
142
93
 
143
- if File.directory? "spec" then
144
- found = try_loading_rspec2 || try_loading_rspec1
145
-
146
- if found then
147
- default_tasks << :spec
148
- else
149
- warn "Found spec dir, but couldn't load rspec (1 or 2) task. skipping."
150
- end
151
- end
152
-
153
94
  desc "Run the default task(s)."
154
95
  task :default => default_tasks
155
96
 
@@ -159,71 +100,4 @@ module Hoe::Test
159
100
  sh "zentest -I=#{libs} #{spec.files.grep(/^(lib|test)/).join(" ")}"
160
101
  end
161
102
  end
162
-
163
- ##
164
- # Generate the test command-line.
165
-
166
- def make_test_cmd
167
- unless SUPPORTED_TEST_FRAMEWORKS.key?(testlib)
168
- raise "unsupported test framework #{testlib}"
169
- end
170
-
171
- deprecate "Moving to Minitest::TestTask. Let me know if you use this!"
172
-
173
- framework = SUPPORTED_TEST_FRAMEWORKS[testlib]
174
-
175
- tests = ["rubygems"]
176
- tests << framework if framework
177
- tests << test_globs.sort.map { |g| Dir.glob(g) }
178
- tests.flatten!
179
- tests.map! { |f| %(require "#{f}") }
180
-
181
- tests.insert 1, test_prelude if test_prelude
182
-
183
- filter = (ENV["FILTER"] || ENV["TESTOPTS"] || "").dup
184
- filter << " -n #{ENV["N"]}" if ENV["N"]
185
- filter << " -e #{ENV["X"]}" if ENV["X"]
186
-
187
- "#{Hoe::RUBY_FLAGS} -e '#{tests.join("; ")}' -- #{filter}"
188
- end
189
-
190
- ##
191
- # Attempt to load RSpec 2, returning true if successful
192
-
193
- def try_loading_rspec2
194
- deprecate "I want to drop this entirely. Let me know if you use this!"
195
-
196
- require "rspec/core/rake_task"
197
-
198
- desc "Run all specifications"
199
- RSpec::Core::RakeTask.new(:spec) do |t|
200
- t.rspec_opts = self.rspec_options
201
- t.rspec_opts << "-I#{self.rspec_dirs.join(":")}" unless
202
- rspec_dirs.empty?
203
- end
204
-
205
- true
206
- rescue LoadError => err
207
- warn "%p while trying to load RSpec 2: %s" % [ err.class, err.message ]
208
- false
209
- end
210
-
211
- ##
212
- # Attempt to load RSpec 1, returning true if successful
213
-
214
- def try_loading_rspec1
215
- deprecate "I want to drop this entirely. Let me know if you use this!"
216
-
217
- require "spec/rake/spectask"
218
-
219
- desc "Run all specifications"
220
- Spec::Rake::SpecTask.new(:spec) do |t|
221
- t.libs = self.rspec_dirs
222
- t.spec_opts = self.rspec_options
223
- end
224
- true
225
- rescue LoadError => err
226
- warn "%p while trying to load RSpec 1: %s" % [ err.class, err.message ]
227
- false
228
- end
229
103
  end
data/lib/hoe.rb CHANGED
@@ -87,7 +87,7 @@ class Hoe
87
87
  include Rake::DSL if defined?(Rake::DSL)
88
88
 
89
89
  # duh
90
- VERSION = "3.26.0"
90
+ VERSION = "4.0.0"
91
91
 
92
92
  @@plugins = [:clean, :debug, :deps, :flay, :flog, :newb, :package,
93
93
  :publish, :gemcutter, :signing, :test]
@@ -726,10 +726,7 @@ class Hoe
726
726
  if lines.first =~ /::/ then
727
727
  Hash[lines.map { |line| line.split(/\s*::\s*/) }]
728
728
  else
729
- warn "DEPRECATED: Please switch readme to hash format for urls."
730
- warn " Only defining 'home' url."
731
- warn " This will be removed on or after 2020-10-28."
732
- { "home" => lines.first }
729
+ raise "Please switch readme to hash format for urls."
733
730
  end
734
731
  end
735
732
 
data/test/test_hoe.rb CHANGED
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  require "minitest/autorun"
3
2
  require "hoe"
4
3
  require "tempfile"
@@ -192,11 +191,8 @@ class TestHoe < Minitest::Test
192
191
  "* http://docs.seattlerb.org/hoe/Hoe.pdf",
193
192
  "* http://github.com/jbarnette/hoe-plugin-examples"].join "\n"
194
193
 
195
- exp = { "home" => "https://github.com/seattlerb/hoe" }
196
- err = /DEPRECATED: Please switch readme to hash format/
197
-
198
- assert_output "", err do
199
- assert_equal exp, hoe.parse_urls(ary)
194
+ assert_raises RuntimeError do
195
+ hoe.parse_urls ary
200
196
  end
201
197
  end
202
198
 
@@ -19,14 +19,6 @@ class TestHoeTest < Minitest::Test
19
19
  end
20
20
  end
21
21
 
22
- def assert_deprecated
23
- err_re = /DEPRECATED:/
24
-
25
- assert_output "", err_re do
26
- yield
27
- end
28
- end
29
-
30
22
  path = %w[lib bin test .].join File::PATH_SEPARATOR
31
23
  mt_path = %w[lib test .].join File::PATH_SEPARATOR
32
24
 
@@ -38,26 +30,6 @@ class TestHoeTest < Minitest::Test
38
30
  -e '%srequire "test/test_hoe_test.rb"'
39
31
  --].join(" ") + " "
40
32
 
41
- def test_make_test_cmd_defaults_to_minitest
42
- skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
43
-
44
- # default
45
- assert_deprecated do
46
- autorun = %(require "minitest/autorun"; )
47
- assert_equal EXPECTED % autorun, @tester.make_test_cmd
48
- end
49
- end
50
-
51
- def test_make_test_cmd_for_testunit
52
- skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
53
-
54
- assert_deprecated do
55
- @tester.testlib = :testunit
56
- testunit = %(require "test/unit"; )
57
- assert_equal EXPECTED % testunit, @tester.make_test_cmd
58
- end
59
- end
60
-
61
33
  def test_make_test_cmd_for_minitest
62
34
  skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
63
35
 
@@ -85,24 +57,4 @@ class TestHoeTest < Minitest::Test
85
57
 
86
58
  assert_equal MT_EXPECTED % [prelude, framework].join("; "), @tester.make_test_cmd
87
59
  end
88
-
89
- def test_make_test_cmd_for_no_framework
90
- skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
91
-
92
- assert_deprecated do
93
- @tester.testlib = :none
94
- assert_equal EXPECTED % "", @tester.make_test_cmd
95
- end
96
- end
97
-
98
- def test_make_test_cmd_for_faketestlib
99
- skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
100
-
101
- @tester.testlib = :faketestlib
102
- e = assert_raises(RuntimeError) do
103
- @tester.make_test_cmd
104
- end
105
-
106
- assert_equal "unsupported test framework faketestlib", e.to_s
107
- end
108
60
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hoe
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.26.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -29,7 +29,7 @@ cert_chain:
29
29
  JFmxn4h9YO/pVdB962BdBNNDia0kgIjI3ENnkLq0dKpYU3+F3KhEuTksLO0L6X/V
30
30
  YsuyUzsMz6GQA4khyaMgKNSD
31
31
  -----END CERTIFICATE-----
32
- date: 2022-10-20 00:00:00.000000000 Z
32
+ date: 2022-12-15 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: rake
@@ -132,7 +132,6 @@ files:
132
132
  - lib/hoe/rdoc.rb
133
133
  - lib/hoe/signing.rb
134
134
  - lib/hoe/test.rb
135
- - lib/minitest/test_task.rb
136
135
  - template/.autotest.erb
137
136
  - template/History.txt.erb
138
137
  - template/Manifest.txt.erb
metadata.gz.sig CHANGED
Binary file
@@ -1,314 +0,0 @@
1
- require "shellwords"
2
- require "rbconfig"
3
- require "rake/tasklib"
4
-
5
- warn <<~EOM
6
- minitest/test_task.rb is now packaged with minitest. If you see
7
- this, you are getting it from hoe instead. If you're NOT able to
8
- upgrade minitest to pick this up, please drop an issue on
9
- seattlerb/hoe and let me know.
10
-
11
- Required from #{caller[2]}
12
- EOM
13
-
14
- module Minitest # :nodoc:
15
-
16
- ##
17
- # Minitest::TestTask is a rake helper that generates several rake
18
- # tasks under the main test task's name-space.
19
- #
20
- # task <name> :: the main test task
21
- # task <name>:cmd :: prints the command to use
22
- # task <name>:deps :: runs each test file by itself to find dependency errors
23
- # task <name>:slow :: runs the tests and reports the slowest 25 tests.
24
- #
25
- # Examples:
26
- #
27
- # Minitest::TestTask.create
28
- #
29
- # The most basic and default setup.
30
- #
31
- # Minitest::TestTask.create :my_tests
32
- #
33
- # The most basic/default setup, but with a custom name
34
- #
35
- # Minitest::TestTask.create :unit do |t|
36
- # t.test_globs = ["test/unit/**/*_test.rb"]
37
- # t.warning = false
38
- # end
39
- #
40
- # Customize the name and only run unit tests.
41
-
42
- class TestTask < Rake::TaskLib
43
- WINDOWS = RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ # :nodoc:
44
-
45
- ##
46
- # Create several test-oriented tasks under +name+. Takes an
47
- # optional block to customize variables.
48
-
49
- def self.create name = :test, &block
50
- task = new name
51
- task.instance_eval(&block) if block
52
- task.process_env
53
- task.define
54
- task
55
- end
56
-
57
- ##
58
- # Extra arguments to pass to the tests. Defaults empty but gets
59
- # populated by a number of enviroment variables:
60
- #
61
- # N (-n flag) :: a string or regexp of tests to run.
62
- # X (-e flag) :: a string or regexp of tests to exclude.
63
- # A (arg) :: quick way to inject an arbitrary argument (eg A=--help).
64
- #
65
- # See #process_env
66
-
67
- attr_accessor :extra_args
68
-
69
- ##
70
- # The code to load the framework. Defaults to requiring
71
- # minitest/autorun...
72
- #
73
- # Why do I have this as an option?
74
-
75
- attr_accessor :framework
76
-
77
- ##
78
- # Extra library directories to include. Defaults to %w[lib test
79
- # .]. Also uses $MT_LIB_EXTRAS allowing you to dynamically
80
- # override/inject directories for custom runs.
81
-
82
- attr_accessor :libs
83
-
84
- ##
85
- # The name of the task and base name for the other tasks generated.
86
-
87
- attr_accessor :name
88
-
89
- ##
90
- # File globs to find test files. Defaults to something sensible to
91
- # find test files under the test directory.
92
-
93
- attr_accessor :test_globs
94
-
95
- ##
96
- # Turn on ruby warnings (-w flag). Defaults to true.
97
-
98
- attr_accessor :warning
99
-
100
- ##
101
- # Optional: Additional ruby to run before the test framework is loaded.
102
-
103
- attr_accessor :test_prelude
104
-
105
- ##
106
- # Print out commands as they run. Defaults to Rake's +trace+ (-t
107
- # flag) option.
108
-
109
- attr_accessor :verbose
110
-
111
- ##
112
- # Use TestTask.create instead.
113
-
114
- def initialize name = :test # :nodoc:
115
- self.extra_args = []
116
- self.framework = %(require "minitest/autorun")
117
- self.libs = %w[lib test .]
118
- self.name = name
119
- self.test_globs = ["test/**/{test,spec}_*.rb",
120
- "test/**/*_{test,spec}.rb"]
121
- self.test_prelude = nil
122
- self.verbose = Rake.application.options.trace
123
- self.warning = true
124
- end
125
-
126
- ##
127
- # Extract variables from the environment and convert them to
128
- # command line arguments. See #extra_args.
129
- #
130
- # Environment Variables:
131
- #
132
- # MT_LIB_EXTRAS :: Extra libs to dynamically override/inject for custom runs.
133
- # N :: Tests to run (string or /regexp/).
134
- # X :: Tests to exclude (string or /regexp/).
135
- # A :: Any extra arguments. Honors shell quoting.
136
- #
137
- # Deprecated:
138
- #
139
- # TESTOPTS :: For argument passing, use +A+.
140
- # N :: For parallel testing, use +MT_CPU+.
141
- # FILTER :: Same as +TESTOPTS+.
142
-
143
- def process_env
144
- warn "TESTOPTS is deprecated in Minitest::TestTask. Use A instead" if
145
- ENV["TESTOPTS"]
146
- warn "FILTER is deprecated in Minitest::TestTask. Use A instead" if
147
- ENV["FILTER"]
148
- warn "N is deprecated in Minitest::TestTask. Use MT_CPU instead" if
149
- ENV["N"] && ENV["N"].to_i > 0
150
-
151
- lib_extras = (ENV["MT_LIB_EXTRAS"] || "").split File::PATH_SEPARATOR
152
- self.libs[0,0] = lib_extras
153
-
154
- extra_args << "-n" << ENV["N"] if ENV["N"]
155
- extra_args << "-e" << ENV["X"] if ENV["X"]
156
- extra_args.concat Shellwords.split(ENV["TESTOPTS"]) if ENV["TESTOPTS"]
157
- extra_args.concat Shellwords.split(ENV["FILTER"]) if ENV["FILTER"]
158
- extra_args.concat Shellwords.split(ENV["A"]) if ENV["A"]
159
-
160
- ENV.delete "N" if ENV["N"]
161
-
162
- # TODO? RUBY_DEBUG = ENV["RUBY_DEBUG"]
163
- # TODO? ENV["RUBY_FLAGS"]
164
-
165
- extra_args.compact!
166
- end
167
-
168
- def define # :nodoc:
169
- default_tasks = []
170
-
171
- desc "Run the test suite. Use N, X, A, and TESTOPTS to add flags/args."
172
- task name do
173
- ruby make_test_cmd, verbose:verbose
174
- end
175
-
176
- desc "Print out the test command. Good for profiling and other tools."
177
- task "#{name}:cmd" do
178
- puts "ruby #{make_test_cmd}"
179
- end
180
-
181
- desc "Show which test files fail when run in isolation."
182
- task "#{name}:isolated" do
183
- tests = Dir[*self.test_globs].uniq
184
-
185
- # 3 seems to be the magic number... (tho not by that much)
186
- bad, good, n = {}, [], (ENV.delete("K") || 3).to_i
187
- file = ENV.delete("F")
188
- times = {}
189
-
190
- tt0 = Time.now
191
-
192
- n.threads_do tests.sort do |path|
193
- t0 = Time.now
194
- output = `#{Gem.ruby} #{make_test_cmd path} 2>&1`
195
- t1 = Time.now - t0
196
-
197
- times[path] = t1
198
-
199
- if $?.success?
200
- $stderr.print "."
201
- good << path
202
- else
203
- $stderr.print "x"
204
- bad[path] = output
205
- end
206
- end
207
-
208
- puts "done"
209
- puts "Ran in %.2f seconds" % [ Time.now - tt0 ]
210
-
211
- if file then
212
- require "json"
213
- File.open file, "w" do |io|
214
- io.puts JSON.pretty_generate times
215
- end
216
- end
217
-
218
- unless good.empty?
219
- puts
220
- puts "# Good tests:"
221
- puts
222
- good.sort.each do |path|
223
- puts "%.2fs: %s" % [times[path], path]
224
- end
225
- end
226
-
227
- unless bad.empty?
228
- puts
229
- puts "# Bad tests:"
230
- puts
231
- bad.keys.sort.each do |path|
232
- puts "%.2fs: %s" % [times[path], path]
233
- end
234
- puts
235
- puts "# Bad Test Output:"
236
- puts
237
- bad.sort.each do |path, output|
238
- puts
239
- puts "# #{path}:"
240
- puts output
241
- end
242
- exit 1
243
- end
244
- end
245
-
246
- task "#{name}:deps" => "#{name}:isolated" # now just an alias
247
-
248
- desc "Show bottom 25 tests wrt time."
249
- task "#{name}:slow" do
250
- sh ["rake #{name} TESTOPTS=-v",
251
- "egrep '#test_.* s = .'",
252
- "sort -n -k2 -t=",
253
- "tail -25"].join " | "
254
- end
255
-
256
- default_tasks << name
257
-
258
- desc "Run the default task(s)."
259
- task :default => default_tasks
260
- end
261
-
262
- ##
263
- # Generate the test command-line.
264
-
265
- def make_test_cmd globs = test_globs
266
- tests = []
267
- tests.concat Dir[*globs].sort.shuffle # TODO: SEED -> srand first?
268
- tests.map! { |f| %(require "#{f}") }
269
-
270
- runner = []
271
- runner << test_prelude if test_prelude
272
- runner << framework
273
- runner.concat tests
274
- runner = runner.join "; "
275
-
276
- args = []
277
- args << "-I#{libs.join(File::PATH_SEPARATOR)}" unless libs.empty?
278
- args << "-w" if warning
279
- args << '-e'
280
- args << "'#{runner}'"
281
- args << '--'
282
- args << extra_args.map(&:shellescape)
283
-
284
- args.join " "
285
- end
286
- end
287
- end
288
-
289
- class Work < Queue
290
- def initialize jobs = []
291
- super()
292
-
293
- jobs.each do |job|
294
- self << job
295
- end
296
-
297
- close
298
- end
299
- end
300
-
301
- class Integer
302
- def threads_do(jobs) # :nodoc:
303
- require "thread"
304
- q = Work.new jobs
305
-
306
- self.times.map {
307
- Thread.new do
308
- while job = q.pop # go until quit value
309
- yield job
310
- end
311
- end
312
- }.each(&:join)
313
- end
314
- end