threadify 1.3.0 → 1.4.3
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 +15 -0
- data/README +7 -4
- data/README.erb +3 -0
- data/lib/threadify.rb +8 -4
- data/rakefile +182 -28
- data/sample/a.rb +1 -1
- data/sample/b.rb +2 -2
- data/threadify.gemspec +18 -6
- metadata +26 -37
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MDM2ZGI2N2E2ZWFjMGUwOGE5Mzg5ZGEzNTA0ZTFiY2JlMjU5Yjg0Ng==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
Y2RlNjMyYWI2MGVhODExNDdiM2VhOTViOTUyOWViMmRlZGFjOWU2YQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MTdlZWZhNGZlMmEyZDA5N2JhMjQ5MTA0MWRmNzZhZDMyMmM5YTE4MmJmZmI5
|
10
|
+
MmIxZWUzMjcyOGU4NjRhNzUzNDQ2MTlhZTM5NDQzN2M4ZjFmNzc1YTQxOWI5
|
11
|
+
Zjk4MGQ5N2YwMWEwMzY0YzY3NjllMDhiZjlkYTQyZDI5NDIzYjc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZGI5N2VmNWY2MGFkMzVlNGI2MGZmNTEyZDZhODYxODg1OWIzMzNjZjBkODc2
|
14
|
+
M2U1NjFhMDQ3MWZkNzIyNzVkMzIzMjI3ODc3MTFiMDkzZjI2MWQzZGZjNDAz
|
15
|
+
NWYwN2YyNjRiYzAzYzQwYmQwODlhODc3MDExYzQyNzFjOTJlYzE=
|
data/README
CHANGED
@@ -64,9 +64,9 @@ SAMPLES
|
|
64
64
|
~ > ruby sample/a.rb
|
65
65
|
|
66
66
|
---
|
67
|
-
without threadify:
|
67
|
+
without threadify: 8.49043202400208
|
68
68
|
---
|
69
|
-
with threadify:
|
69
|
+
with threadify: 2.45102596282959
|
70
70
|
|
71
71
|
|
72
72
|
<========< sample/b.rb >========>
|
@@ -118,9 +118,9 @@ SAMPLES
|
|
118
118
|
~ > ruby sample/b.rb
|
119
119
|
|
120
120
|
---
|
121
|
-
without threadify:
|
121
|
+
without threadify: 19.2692859172821
|
122
122
|
---
|
123
|
-
with threadify: 0.
|
123
|
+
with threadify: 0.851074934005737
|
124
124
|
---
|
125
125
|
:needle: 42
|
126
126
|
:a: 42
|
@@ -130,6 +130,9 @@ SAMPLES
|
|
130
130
|
|
131
131
|
|
132
132
|
HISTORY
|
133
|
+
1.4.2
|
134
|
+
- fix name collision running under jruby's native threads. thanks charles nutter!
|
135
|
+
|
133
136
|
1.3.0
|
134
137
|
- added Threadify(*args, &block) method to execute arbitrary code in parallel
|
135
138
|
|
data/README.erb
CHANGED
data/lib/threadify.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
module Threadify
|
2
|
-
Threadify::VERSION = '1.3
|
2
|
+
Threadify::VERSION = '1.4.3' unless defined?(Threadify::VERSION)
|
3
3
|
def Threadify.version() Threadify::VERSION end
|
4
4
|
|
5
|
+
def Threadify.description
|
6
|
+
'https://github.com/ahoward/threadify.git'
|
7
|
+
end
|
8
|
+
|
5
9
|
require 'thread'
|
6
10
|
require 'enumerator'
|
7
11
|
|
@@ -90,8 +94,8 @@ module Enumerable
|
|
90
94
|
break if caught
|
91
95
|
job = jobsi.shift
|
92
96
|
break if job == done
|
93
|
-
|
94
|
-
jobsi << (job << block.call(*
|
97
|
+
argv = job.first
|
98
|
+
jobsi << (job << block.call(*argv))
|
95
99
|
}
|
96
100
|
nothing
|
97
101
|
end
|
@@ -99,7 +103,7 @@ module Enumerable
|
|
99
103
|
|
100
104
|
unless nothing == thrown
|
101
105
|
thrownq.push [i, thrown]
|
102
|
-
|
106
|
+
argv, i = job
|
103
107
|
end
|
104
108
|
end
|
105
109
|
end
|
data/rakefile
CHANGED
@@ -1,18 +1,69 @@
|
|
1
|
-
|
2
1
|
This.rubyforge_project = 'codeforpeople'
|
3
2
|
This.author = "Ara T. Howard"
|
4
3
|
This.email = "ara.t.howard@gmail.com"
|
5
|
-
This.homepage = "
|
4
|
+
This.homepage = "https://github.com/ahoward/#{ This.lib }"
|
6
5
|
|
6
|
+
task :license do
|
7
|
+
open('LICENSE', 'w'){|fd| fd.puts "same as ruby's"}
|
8
|
+
end
|
7
9
|
|
8
10
|
task :default do
|
9
|
-
puts(Rake::Task.tasks.map{|task| task.name} - ['default'])
|
11
|
+
puts((Rake::Task.tasks.map{|task| task.name.gsub(/::/,':')} - ['default']).sort)
|
12
|
+
end
|
13
|
+
|
14
|
+
task :test do
|
15
|
+
run_tests!
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :test do
|
19
|
+
task(:unit){ run_tests!(:unit) }
|
20
|
+
task(:functional){ run_tests!(:functional) }
|
21
|
+
task(:integration){ run_tests!(:integration) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def run_tests!(which = nil)
|
25
|
+
which ||= '**'
|
26
|
+
test_dir = File.join(This.dir, "test")
|
27
|
+
test_glob ||= File.join(test_dir, "#{ which }/**_test.rb")
|
28
|
+
test_rbs = Dir.glob(test_glob).sort
|
29
|
+
|
30
|
+
div = ('=' * 119)
|
31
|
+
line = ('-' * 119)
|
32
|
+
|
33
|
+
test_rbs.each_with_index do |test_rb, index|
|
34
|
+
testno = index + 1
|
35
|
+
command = "#{ This.ruby } -w -I ./lib -I ./test/lib #{ test_rb }"
|
36
|
+
|
37
|
+
puts
|
38
|
+
say(div, :color => :cyan, :bold => true)
|
39
|
+
say("@#{ testno } => ", :bold => true, :method => :print)
|
40
|
+
say(command, :color => :cyan, :bold => true)
|
41
|
+
say(line, :color => :cyan, :bold => true)
|
42
|
+
|
43
|
+
system(command)
|
44
|
+
|
45
|
+
say(line, :color => :cyan, :bold => true)
|
46
|
+
|
47
|
+
status = $?.exitstatus
|
48
|
+
|
49
|
+
if status.zero?
|
50
|
+
say("@#{ testno } <= ", :bold => true, :color => :white, :method => :print)
|
51
|
+
say("SUCCESS", :color => :green, :bold => true)
|
52
|
+
else
|
53
|
+
say("@#{ testno } <= ", :bold => true, :color => :white, :method => :print)
|
54
|
+
say("FAILURE", :color => :red, :bold => true)
|
55
|
+
end
|
56
|
+
say(line, :color => :cyan, :bold => true)
|
57
|
+
|
58
|
+
exit(status) unless status.zero?
|
59
|
+
end
|
10
60
|
end
|
11
61
|
|
12
62
|
|
13
63
|
task :gemspec do
|
14
|
-
ignore_extensions = 'git', 'svn', 'tmp', /sw./, 'bak', 'gem'
|
15
|
-
ignore_directories = 'pkg'
|
64
|
+
ignore_extensions = ['git', 'svn', 'tmp', /sw./, 'bak', 'gem']
|
65
|
+
ignore_directories = ['pkg']
|
66
|
+
ignore_files = ['test/log']
|
16
67
|
|
17
68
|
shiteless =
|
18
69
|
lambda do |list|
|
@@ -26,17 +77,27 @@ task :gemspec do
|
|
26
77
|
dirname = File.expand_path(entry)
|
27
78
|
ignore_directories.any?{|dir| File.expand_path(dir) == dirname}
|
28
79
|
end
|
80
|
+
list.delete_if do |entry|
|
81
|
+
next unless test(?f, entry)
|
82
|
+
filename = File.expand_path(entry)
|
83
|
+
ignore_files.any?{|file| File.expand_path(file) == filename}
|
84
|
+
end
|
29
85
|
end
|
30
86
|
|
31
87
|
lib = This.lib
|
88
|
+
object = This.object
|
32
89
|
version = This.version
|
33
90
|
files = shiteless[Dir::glob("**/**")]
|
34
91
|
executables = shiteless[Dir::glob("bin/*")].map{|exe| File.basename(exe)}
|
35
|
-
has_rdoc = true #File.exist?('doc')
|
92
|
+
#has_rdoc = true #File.exist?('doc')
|
36
93
|
test_files = "test/#{ lib }.rb" if File.file?("test/#{ lib }.rb")
|
94
|
+
summary = object.respond_to?(:summary) ? object.summary : "summary: #{ lib } kicks the ass"
|
95
|
+
description = object.respond_to?(:description) ? object.description : "description: #{ lib } kicks the ass"
|
96
|
+
license = object.respond_to?(:license) ? object.license : "same as ruby's"
|
37
97
|
|
38
|
-
|
39
|
-
|
98
|
+
if This.extensions.nil?
|
99
|
+
This.extensions = []
|
100
|
+
extensions = This.extensions
|
40
101
|
%w( Makefile configure extconf.rb ).each do |ext|
|
41
102
|
extensions << ext if File.exists?(ext)
|
42
103
|
end
|
@@ -57,16 +118,18 @@ task :gemspec do
|
|
57
118
|
spec.version = #{ version.inspect }
|
58
119
|
spec.platform = Gem::Platform::RUBY
|
59
120
|
spec.summary = #{ lib.inspect }
|
121
|
+
spec.description = #{ description.inspect }
|
122
|
+
spec.license = #{ license.inspect }
|
60
123
|
|
61
|
-
spec.files
|
124
|
+
spec.files =\n#{ files.sort.pretty_inspect }
|
62
125
|
spec.executables = #{ executables.inspect }
|
63
126
|
|
64
127
|
spec.require_path = "lib"
|
65
128
|
|
66
|
-
spec.has_rdoc = #{ has_rdoc.inspect }
|
67
129
|
spec.test_files = #{ test_files.inspect }
|
68
|
-
|
69
|
-
|
130
|
+
|
131
|
+
### spec.add_dependency 'lib', '>= version'
|
132
|
+
#### spec.add_dependency 'map'
|
70
133
|
|
71
134
|
spec.extensions.push(*#{ extensions.inspect })
|
72
135
|
|
@@ -79,19 +142,21 @@ task :gemspec do
|
|
79
142
|
}
|
80
143
|
end
|
81
144
|
|
82
|
-
|
83
|
-
|
145
|
+
Fu.mkdir_p(This.pkgdir)
|
146
|
+
gemspec = "#{ lib }.gemspec"
|
147
|
+
open(gemspec, "w"){|fd| fd.puts(template)}
|
148
|
+
This.gemspec = gemspec
|
84
149
|
end
|
85
150
|
|
86
151
|
task :gem => [:clean, :gemspec] do
|
87
|
-
Fu.mkdir_p
|
152
|
+
Fu.mkdir_p(This.pkgdir)
|
88
153
|
before = Dir['*.gem']
|
89
154
|
cmd = "gem build #{ This.gemspec }"
|
90
155
|
`#{ cmd }`
|
91
156
|
after = Dir['*.gem']
|
92
157
|
gem = ((after - before).first || after.first) or abort('no gem!')
|
93
|
-
Fu.mv
|
94
|
-
This.gem = File.basename(gem)
|
158
|
+
Fu.mv(gem, This.pkgdir)
|
159
|
+
This.gem = File.join(This.pkgdir, File.basename(gem))
|
95
160
|
end
|
96
161
|
|
97
162
|
task :readme do
|
@@ -110,13 +175,13 @@ task :readme do
|
|
110
175
|
cmd = "ruby #{ sample }"
|
111
176
|
samples << Util.indent(prompt + cmd, 2) << "\n\n"
|
112
177
|
|
113
|
-
cmd = "ruby -e'STDOUT.sync=true; exec %(ruby -
|
178
|
+
cmd = "ruby -e'STDOUT.sync=true; exec %(ruby -I ./lib #{ sample })'"
|
114
179
|
samples << Util.indent(`#{ cmd } 2>&1`, 4) << "\n"
|
115
180
|
end
|
116
181
|
|
117
182
|
template =
|
118
|
-
if test(?e, '
|
119
|
-
Template{ IO.read('
|
183
|
+
if test(?e, 'README.erb')
|
184
|
+
Template{ IO.read('README.erb') }
|
120
185
|
else
|
121
186
|
Template {
|
122
187
|
<<-__
|
@@ -147,9 +212,18 @@ task :release => [:clean, :gemspec, :gem] do
|
|
147
212
|
gems = Dir[File.join(This.pkgdir, '*.gem')].flatten
|
148
213
|
raise "which one? : #{ gems.inspect }" if gems.size > 1
|
149
214
|
raise "no gems?" if gems.size < 1
|
150
|
-
|
215
|
+
|
216
|
+
cmd = "gem push #{ This.gem }"
|
217
|
+
puts cmd
|
218
|
+
puts
|
219
|
+
system(cmd)
|
220
|
+
abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero?
|
221
|
+
|
222
|
+
cmd = "rubyforge login && rubyforge add_release #{ This.rubyforge_project } #{ This.lib } #{ This.version } #{ This.gem }"
|
151
223
|
puts cmd
|
152
|
-
|
224
|
+
puts
|
225
|
+
system(cmd)
|
226
|
+
abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero?
|
153
227
|
end
|
154
228
|
|
155
229
|
|
@@ -157,37 +231,63 @@ end
|
|
157
231
|
|
158
232
|
|
159
233
|
BEGIN {
|
234
|
+
# support for this rakefile
|
235
|
+
#
|
160
236
|
$VERBOSE = nil
|
161
237
|
|
162
238
|
require 'ostruct'
|
163
239
|
require 'erb'
|
164
240
|
require 'fileutils'
|
241
|
+
require 'rbconfig'
|
242
|
+
require 'pp'
|
165
243
|
|
244
|
+
# fu shortcut
|
245
|
+
#
|
166
246
|
Fu = FileUtils
|
167
247
|
|
248
|
+
# cache a bunch of stuff about this rakefile/environment
|
249
|
+
#
|
168
250
|
This = OpenStruct.new
|
169
251
|
|
170
252
|
This.file = File.expand_path(__FILE__)
|
171
253
|
This.dir = File.dirname(This.file)
|
172
254
|
This.pkgdir = File.join(This.dir, 'pkg')
|
173
255
|
|
256
|
+
# grok lib
|
257
|
+
#
|
174
258
|
lib = ENV['LIB']
|
175
259
|
unless lib
|
176
|
-
lib = File.basename(Dir.pwd)
|
260
|
+
lib = File.basename(Dir.pwd).sub(/[-].*$/, '')
|
177
261
|
end
|
178
262
|
This.lib = lib
|
179
263
|
|
264
|
+
# grok version
|
265
|
+
#
|
180
266
|
version = ENV['VERSION']
|
181
267
|
unless version
|
182
|
-
|
183
|
-
|
184
|
-
|
268
|
+
require "./lib/#{ This.lib }"
|
269
|
+
This.name = lib.capitalize
|
270
|
+
This.object = eval(This.name)
|
271
|
+
version = This.object.send(:version)
|
185
272
|
end
|
186
273
|
This.version = version
|
187
274
|
|
275
|
+
# we need to know the name of the lib an it's version
|
276
|
+
#
|
188
277
|
abort('no lib') unless This.lib
|
189
278
|
abort('no version') unless This.version
|
190
279
|
|
280
|
+
# discover full path to this ruby executable
|
281
|
+
#
|
282
|
+
c = Config::CONFIG
|
283
|
+
bindir = c["bindir"] || c['BINDIR']
|
284
|
+
ruby_install_name = c['ruby_install_name'] || c['RUBY_INSTALL_NAME'] || 'ruby'
|
285
|
+
ruby_ext = c['EXEEXT'] || ''
|
286
|
+
ruby = File.join(bindir, (ruby_install_name + ruby_ext))
|
287
|
+
This.ruby = ruby
|
288
|
+
|
289
|
+
# some utils
|
290
|
+
#
|
191
291
|
module Util
|
192
292
|
def indent(s, n = 2)
|
193
293
|
s = unindent(s)
|
@@ -197,7 +297,7 @@ BEGIN {
|
|
197
297
|
|
198
298
|
def unindent(s)
|
199
299
|
indent = nil
|
200
|
-
s.
|
300
|
+
s.each_line do |line|
|
201
301
|
next if line =~ %r/^\s*$/
|
202
302
|
indent = line[%r/^\s*/] and break
|
203
303
|
end
|
@@ -206,17 +306,71 @@ BEGIN {
|
|
206
306
|
extend self
|
207
307
|
end
|
208
308
|
|
309
|
+
# template support
|
310
|
+
#
|
209
311
|
class Template
|
210
312
|
def initialize(&block)
|
211
313
|
@block = block
|
212
314
|
@template = block.call.to_s
|
213
315
|
end
|
214
316
|
def expand(b=nil)
|
215
|
-
ERB.new(Util.unindent(@template)).result(b||@block)
|
317
|
+
ERB.new(Util.unindent(@template)).result((b||@block).binding)
|
216
318
|
end
|
217
319
|
alias_method 'to_s', 'expand'
|
218
320
|
end
|
219
321
|
def Template(*args, &block) Template.new(*args, &block) end
|
220
322
|
|
323
|
+
# colored console output support
|
324
|
+
#
|
325
|
+
This.ansi = {
|
326
|
+
:clear => "\e[0m",
|
327
|
+
:reset => "\e[0m",
|
328
|
+
:erase_line => "\e[K",
|
329
|
+
:erase_char => "\e[P",
|
330
|
+
:bold => "\e[1m",
|
331
|
+
:dark => "\e[2m",
|
332
|
+
:underline => "\e[4m",
|
333
|
+
:underscore => "\e[4m",
|
334
|
+
:blink => "\e[5m",
|
335
|
+
:reverse => "\e[7m",
|
336
|
+
:concealed => "\e[8m",
|
337
|
+
:black => "\e[30m",
|
338
|
+
:red => "\e[31m",
|
339
|
+
:green => "\e[32m",
|
340
|
+
:yellow => "\e[33m",
|
341
|
+
:blue => "\e[34m",
|
342
|
+
:magenta => "\e[35m",
|
343
|
+
:cyan => "\e[36m",
|
344
|
+
:white => "\e[37m",
|
345
|
+
:on_black => "\e[40m",
|
346
|
+
:on_red => "\e[41m",
|
347
|
+
:on_green => "\e[42m",
|
348
|
+
:on_yellow => "\e[43m",
|
349
|
+
:on_blue => "\e[44m",
|
350
|
+
:on_magenta => "\e[45m",
|
351
|
+
:on_cyan => "\e[46m",
|
352
|
+
:on_white => "\e[47m"
|
353
|
+
}
|
354
|
+
def say(phrase, *args)
|
355
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
356
|
+
options[:color] = args.shift.to_s.to_sym unless args.empty?
|
357
|
+
keys = options.keys
|
358
|
+
keys.each{|key| options[key.to_s.to_sym] = options.delete(key)}
|
359
|
+
|
360
|
+
color = options[:color]
|
361
|
+
bold = options.has_key?(:bold)
|
362
|
+
|
363
|
+
parts = [phrase]
|
364
|
+
parts.unshift(This.ansi[color]) if color
|
365
|
+
parts.unshift(This.ansi[:bold]) if bold
|
366
|
+
parts.push(This.ansi[:clear]) if parts.size > 1
|
367
|
+
|
368
|
+
method = options[:method] || :puts
|
369
|
+
|
370
|
+
Kernel.send(method, parts.join)
|
371
|
+
end
|
372
|
+
|
373
|
+
# always run out of the project dir
|
374
|
+
#
|
221
375
|
Dir.chdir(This.dir)
|
222
376
|
}
|
data/sample/a.rb
CHANGED
data/sample/b.rb
CHANGED
@@ -28,7 +28,7 @@ end
|
|
28
28
|
|
29
29
|
raise if a != b
|
30
30
|
|
31
|
-
y
|
31
|
+
y({:a => a, :b => b, :needle => needle}.to_yaml)
|
32
32
|
|
33
33
|
BEGIN {
|
34
34
|
def time label
|
@@ -36,6 +36,6 @@ BEGIN {
|
|
36
36
|
yield
|
37
37
|
ensure
|
38
38
|
b = Time.now.to_f
|
39
|
-
y
|
39
|
+
y({label => (b - a)})
|
40
40
|
end
|
41
41
|
}
|
data/threadify.gemspec
CHANGED
@@ -3,24 +3,36 @@
|
|
3
3
|
|
4
4
|
Gem::Specification::new do |spec|
|
5
5
|
spec.name = "threadify"
|
6
|
-
spec.version = "1.3
|
6
|
+
spec.version = "1.4.3"
|
7
7
|
spec.platform = Gem::Platform::RUBY
|
8
8
|
spec.summary = "threadify"
|
9
|
+
spec.description = "https://github.com/ahoward/threadify.git"
|
10
|
+
spec.license = "same as ruby's"
|
11
|
+
|
12
|
+
spec.files =
|
13
|
+
["README",
|
14
|
+
"README.erb",
|
15
|
+
"lib",
|
16
|
+
"lib/threadify.rb",
|
17
|
+
"rakefile",
|
18
|
+
"sample",
|
19
|
+
"sample/a.rb",
|
20
|
+
"sample/b.rb",
|
21
|
+
"threadify.gemspec"]
|
9
22
|
|
10
|
-
spec.files = ["lib", "lib/threadify.rb", "rakefile", "README", "README.erb", "sample", "sample/a.rb", "sample/b.rb", "threadify.gemspec"]
|
11
23
|
spec.executables = []
|
12
24
|
|
13
25
|
spec.require_path = "lib"
|
14
26
|
|
15
|
-
spec.has_rdoc = true
|
16
27
|
spec.test_files = nil
|
17
|
-
|
18
|
-
|
28
|
+
|
29
|
+
### spec.add_dependency 'lib', '>= version'
|
30
|
+
#### spec.add_dependency 'map'
|
19
31
|
|
20
32
|
spec.extensions.push(*[])
|
21
33
|
|
22
34
|
spec.rubyforge_project = "codeforpeople"
|
23
35
|
spec.author = "Ara T. Howard"
|
24
36
|
spec.email = "ara.t.howard@gmail.com"
|
25
|
-
spec.homepage = "
|
37
|
+
spec.homepage = "https://github.com/ahoward/threadify"
|
26
38
|
end
|
metadata
CHANGED
@@ -1,61 +1,50 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: threadify
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Ara T. Howard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
date: 2009-09-10 00:00:00 -06:00
|
13
|
-
default_executable:
|
11
|
+
date: 2014-02-15 00:00:00.000000000 Z
|
14
12
|
dependencies: []
|
15
|
-
|
16
|
-
description:
|
13
|
+
description: https://github.com/ahoward/threadify.git
|
17
14
|
email: ara.t.howard@gmail.com
|
18
15
|
executables: []
|
19
|
-
|
20
16
|
extensions: []
|
21
|
-
|
22
17
|
extra_rdoc_files: []
|
23
|
-
|
24
|
-
files:
|
25
|
-
- lib
|
26
|
-
- lib/threadify.rb
|
27
|
-
- rakefile
|
18
|
+
files:
|
28
19
|
- README
|
29
20
|
- README.erb
|
30
|
-
-
|
21
|
+
- lib/threadify.rb
|
22
|
+
- rakefile
|
31
23
|
- sample/a.rb
|
32
24
|
- sample/b.rb
|
33
25
|
- threadify.gemspec
|
34
|
-
|
35
|
-
|
26
|
+
homepage: https://github.com/ahoward/threadify
|
27
|
+
licenses:
|
28
|
+
- same as ruby's
|
29
|
+
metadata: {}
|
36
30
|
post_install_message:
|
37
31
|
rdoc_options: []
|
38
|
-
|
39
|
-
require_paths:
|
32
|
+
require_paths:
|
40
33
|
- lib
|
41
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
version: "0"
|
52
|
-
version:
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
53
44
|
requirements: []
|
54
|
-
|
55
45
|
rubyforge_project: codeforpeople
|
56
|
-
rubygems_version:
|
46
|
+
rubygems_version: 2.0.3
|
57
47
|
signing_key:
|
58
|
-
specification_version:
|
48
|
+
specification_version: 4
|
59
49
|
summary: threadify
|
60
50
|
test_files: []
|
61
|
-
|