faster_require 0.9.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +2 -0
- data/LICENSE +3 -0
- data/README +7 -3
- data/Rakefile +2 -0
- data/VERSION +1 -1
- data/lib/faster_require.rb +365 -365
- metadata +169 -185
data/ChangeLog
CHANGED
data/LICENSE
ADDED
data/README
CHANGED
@@ -146,7 +146,7 @@ be slow the first time you run it in each directory.
|
|
146
146
|
To make it be fast and basically disregard PWD, you can add global setting $faster_require_ignore_pwd_for_cache = true
|
147
147
|
and set it before requiring faster_require itself.
|
148
148
|
|
149
|
-
So
|
149
|
+
So now rubygems.rb at the top would look like
|
150
150
|
$faster_require_ignore_pwd_for_cache = true
|
151
151
|
require 'd:/Ruby192/lib/ruby/gems/1.9.1/gems/faster_require-0.6.0/lib/faster_require.rb'
|
152
152
|
|
@@ -154,7 +154,11 @@ And now your gem scripts will run fast regardless of where you run them from.
|
|
154
154
|
|
155
155
|
== See also ==
|
156
156
|
|
157
|
-
Spork can help speedup rails tests.
|
157
|
+
Spork can help speedup rails tests. It "should" work well when used in conjunction with faster_require, as well.
|
158
158
|
|
159
|
+
Also "The Code Shop" releases versions of ruby that have an optimized require method, which might make this library obsolete.
|
160
|
+
http://thecodeshop.github.com
|
161
|
+
https://groups.google.com/group/thecodeshop
|
162
|
+
http://itreallymatters.net/post/12897174267/speedup-ruby-1-9-3-on-windows#.T89_XtVYut0
|
159
163
|
|
160
|
-
Enjoy.
|
164
|
+
Enjoy.
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.3
|
data/lib/faster_require.rb
CHANGED
@@ -1,366 +1,366 @@
|
|
1
|
-
# check for and avoid a double load...because we're afraid to load twice, since we override require et al
|
2
|
-
|
3
|
-
if(defined?($already_using_faster_require))
|
4
|
-
p 'warning: faster_require double load--expected?' if $FAST_REQUIRE_DEBUG
|
5
|
-
local_version = File.read(File.dirname(__FILE__) + "/../VERSION")
|
6
|
-
raise "mismatched faster_require versions! #{local_version} != #{FastRequire::VERSION}" unless local_version == FastRequire::VERSION
|
7
|
-
else
|
8
|
-
|
9
|
-
$already_using_faster_require = true
|
10
|
-
|
11
|
-
|
12
|
-
require 'rbconfig' # maybe could cache this one's loc, too? probably not...
|
13
|
-
|
14
|
-
module FastRequire
|
15
|
-
|
16
|
-
$FAST_REQUIRE_DEBUG ||= $DEBUG # can set this via $DEBUG, or on its own previously
|
17
|
-
|
18
|
-
VERSION = File.read(File.dirname(__FILE__) + "/../VERSION")
|
19
|
-
|
20
|
-
def self.sanitize filename
|
21
|
-
filename.gsub(/[\/:]/, '_')
|
22
|
-
end
|
23
|
-
|
24
|
-
if RUBY_VERSION >= '1.9.0'
|
25
|
-
# appears 1.9.x has inconsistent string hashes...so roll our own...
|
26
|
-
def self.string_array_cruddy_hash strings
|
27
|
-
# we only call this method once, so overflowing to a bignum is ok
|
28
|
-
hash = 1;
|
29
|
-
for string in strings
|
30
|
-
hash = hash * 31
|
31
|
-
string.each_byte{|b|
|
32
|
-
hash += b
|
33
|
-
}
|
34
|
-
end
|
35
|
-
hash # probably a Bignum (sigh)
|
36
|
-
end
|
37
|
-
|
38
|
-
else
|
39
|
-
|
40
|
-
def self.string_array_cruddy_hash strings
|
41
|
-
strings.hash
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.setup
|
47
|
-
begin
|
48
|
-
@@dir = File.expand_path('~/.ruby_faster_require_cache')
|
49
|
-
rescue ArgumentError => e # couldn't find HOME environment or the like
|
50
|
-
whoami = `whoami`.strip
|
51
|
-
if File.directory?(home = "/home/#{whoami}")
|
52
|
-
@@dir = home + '/.ruby_faster_require_cache'
|
53
|
-
else
|
54
|
-
raise e.to_s + " and couldnt infer it from whoami"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
unless File.directory?(@@dir)
|
59
|
-
Dir.mkdir @@dir
|
60
|
-
raise 'unable to create user dir for faster_require ' + @@dir unless File.directory?(@@dir)
|
61
|
-
end
|
62
|
-
|
63
|
-
config = RbConfig::CONFIG
|
64
|
-
|
65
|
-
# try to be a unique, but not too long, filename, for restrictions on filename length in doze
|
66
|
-
ruby_bin_name = config['bindir'] + config['ruby_install_name'] # needed if you have two rubies, same box, same ruby description [version, patch number]
|
67
|
-
parts = [File.basename($0), RUBY_PATCHLEVEL.to_s, RUBY_PLATFORM, RUBY_VERSION, RUBY_VERSION, File.expand_path(File.dirname($0)), ruby_bin_name]
|
68
|
-
unless defined?($faster_require_ignore_pwd_for_cache)
|
69
|
-
# add in Dir.pwd
|
70
|
-
parts << File.basename(Dir.pwd)
|
71
|
-
parts << Dir.pwd
|
72
|
-
else
|
73
|
-
p 'ignoring dirpwd for cached file location' if $FAST_REQUIRE_DEBUG
|
74
|
-
end
|
75
|
-
|
76
|
-
sanitized_parts = parts.map{|part| sanitize(part)}
|
77
|
-
|
78
|
-
full_parts_hash = string_array_cruddy_hash(parts).to_s
|
79
|
-
|
80
|
-
loc_name = (sanitized_parts.map{|part| part[0..5] + (part[-5..-1] || '')}).join('-') + '-' + full_parts_hash + '.marsh'
|
81
|
-
|
82
|
-
@@loc = @@dir + '/' + loc_name
|
83
|
-
|
84
|
-
if File.exist?(@@loc)
|
85
|
-
FastRequire.load @@loc
|
86
|
-
else
|
87
|
-
@@require_locs = {}
|
88
|
-
end
|
89
|
-
|
90
|
-
@@already_loaded = {}
|
91
|
-
|
92
|
-
$LOADED_FEATURES.each{|already_loaded|
|
93
|
-
# in 1.8 they might be partial paths
|
94
|
-
# in 1.9, they might be non collapsed paths
|
95
|
-
# so we have to sanitize them here...
|
96
|
-
# XXXX File.exist? is a bit too loose, here...
|
97
|
-
if File.exist?(already_loaded)
|
98
|
-
key = File.expand_path(already_loaded)
|
99
|
-
else
|
100
|
-
key = FastRequire.guess_discover(already_loaded) || already_loaded
|
101
|
-
end
|
102
|
-
@@already_loaded[key] = true
|
103
|
-
}
|
104
|
-
|
105
|
-
@@already_loaded[File.expand_path(__FILE__)] = true # this file itself isn't in loaded features, yet, but very soon will be..
|
106
|
-
# a special case--I hope...
|
107
|
-
|
108
|
-
# also disallow re-loading $0
|
109
|
-
@@require_locs[$0] = File.expand_path($0) # so when we run into $0 on a freak require, we will skip it...
|
110
|
-
@@already_loaded[File.expand_path($0)] = true
|
111
|
-
|
112
|
-
end
|
113
|
-
|
114
|
-
def self.load filename
|
115
|
-
cached_marshal_data = File.open(filename, 'rb') {|f| f.read}
|
116
|
-
begin
|
117
|
-
@@require_locs = Marshal.restore( cached_marshal_data )
|
118
|
-
rescue ArgumentError
|
119
|
-
@@require_locs= {}
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
|
124
|
-
# try to see where this file was loaded from, from $:
|
125
|
-
# partial_name might be abc.rb, or might be abc
|
126
|
-
# partial_name might be a full path, too
|
127
|
-
def self.guess_discover partial_name, add_dot_rb = false
|
128
|
-
|
129
|
-
# test for full path first
|
130
|
-
# unfortunately it has to be a full separate test
|
131
|
-
# for windoze sake, as drive letter could be different than slapping a '/' on the dir to test list...
|
132
|
-
tests = [partial_name]
|
133
|
-
|
134
|
-
if add_dot_rb
|
135
|
-
tests << partial_name + '.rb'
|
136
|
-
tests << partial_name + '.' + RbConfig::CONFIG['DLEXT']
|
137
|
-
end
|
138
|
-
|
139
|
-
tests.each{|b|
|
140
|
-
# assume that .rb.rb is...valid...?
|
141
|
-
if File.file?(b) && ((b[-3..-1] == '.rb') || (b[-3..-1] == '.' + RbConfig::CONFIG['DLEXT']))
|
142
|
-
return File.expand_path(b)
|
143
|
-
end
|
144
|
-
}
|
145
|
-
|
146
|
-
for dir in $:
|
147
|
-
if File.file?(b = (dir + '/' + partial_name))
|
148
|
-
# make sure we require a file that has the right suffix...
|
149
|
-
if (b[-3..-1] == '.rb') || (b[-3..-1] == '.' + RbConfig::CONFIG['DLEXT'])
|
150
|
-
return File.expand_path(b)
|
151
|
-
end
|
152
|
-
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
if add_dot_rb && (partial_name[-3..-1] != '.rb') && (partial_name[-3..-1] != '.' + RbConfig::CONFIG['DLEXT'])
|
157
|
-
guess_discover(partial_name + '.rb') || guess_discover(partial_name + '.')
|
158
|
-
else
|
159
|
-
nil
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
FastRequire.setup
|
164
|
-
|
165
|
-
def self.already_loaded
|
166
|
-
@@already_loaded
|
167
|
-
end
|
168
|
-
|
169
|
-
def self.require_locs
|
170
|
-
@@require_locs
|
171
|
-
end
|
172
|
-
|
173
|
-
def self.dir
|
174
|
-
@@dir
|
175
|
-
end
|
176
|
-
|
177
|
-
def self.loc
|
178
|
-
@@loc
|
179
|
-
end
|
180
|
-
|
181
|
-
at_exit {
|
182
|
-
FastRequire.default_save
|
183
|
-
}
|
184
|
-
|
185
|
-
def self.default_save
|
186
|
-
self.save @@loc
|
187
|
-
end
|
188
|
-
|
189
|
-
def self.save to_file
|
190
|
-
File.open(to_file, 'wb'){|f| f.write Marshal.dump(@@require_locs)}
|
191
|
-
end
|
192
|
-
|
193
|
-
# for testing use only, basically
|
194
|
-
def self.clear_all!
|
195
|
-
require 'fileutils'
|
196
|
-
success = false
|
197
|
-
if File.exist? @@dir
|
198
|
-
FileUtils.rm_rf @@dir
|
199
|
-
success = true
|
200
|
-
end
|
201
|
-
@@require_locs.clear
|
202
|
-
setup
|
203
|
-
success
|
204
|
-
end
|
205
|
-
|
206
|
-
private
|
207
|
-
def last_caller
|
208
|
-
caller[-2]
|
209
|
-
end
|
210
|
-
|
211
|
-
IN_PROCESS = []
|
212
|
-
ALL_IN_PROCESS = []
|
213
|
-
@@count = 0
|
214
|
-
|
215
|
-
public
|
216
|
-
|
217
|
-
def require_cached lib
|
218
|
-
lib = lib.to_s # might not be zactly 1.9 compat... to_path ??
|
219
|
-
ALL_IN_PROCESS << [lib, @@count += 1]
|
220
|
-
begin
|
221
|
-
p 'doing require ' + lib + ' from ' + caller[-1] if $FAST_REQUIRE_DEBUG
|
222
|
-
if known_loc = @@require_locs[lib]
|
223
|
-
if @@already_loaded[known_loc]
|
224
|
-
p 'already loaded ' + known_loc + ' ' + lib if $FAST_REQUIRE_DEBUG
|
225
|
-
return false
|
226
|
-
end
|
227
|
-
@@already_loaded[known_loc] = true
|
228
|
-
if known_loc =~ /\.#{RbConfig::CONFIG['DLEXT']}$/
|
229
|
-
puts 'doing original_non_cached_require on .so full path ' + known_loc if $FAST_REQUIRE_DEBUG
|
230
|
-
original_non_cached_require known_loc # not much we can do there...too bad...well at least we pass it a full path though :P
|
231
|
-
else
|
232
|
-
unless $LOADED_FEATURES.include? known_loc
|
233
|
-
if known_loc =~ /rubygems.rb$/
|
234
|
-
puts 'requiring rubygems ' + lib if $FAST_REQUIRE_DEBUG
|
235
|
-
original_non_cached_require(lib) # revert to normal require so rubygems doesn't freak out when it finds itself already in $LOADED_FEATURES with rubygems > 1.6 :P
|
236
|
-
else
|
237
|
-
IN_PROCESS << known_loc
|
238
|
-
begin
|
239
|
-
if $FAST_REQUIRE_DEBUG
|
240
|
-
puts 'doing cached loc eval on ' + lib + '=>' + known_loc + " with stack:" + IN_PROCESS.join(' ')
|
241
|
-
end
|
242
|
-
$LOADED_FEATURES << known_loc
|
243
|
-
# fakely add the load path, too, so that autoload for the same file/path in gems will work <sigh> [rspec2]
|
244
|
-
no_suffix_full_path = known_loc.gsub(/\.[^.]+$/, '')
|
245
|
-
no_suffix_lib = lib.gsub(/\.[^.]+$/, '')
|
246
|
-
libs_path = no_suffix_full_path.gsub(no_suffix_lib, '')
|
247
|
-
libs_path = File.expand_path(libs_path) # strip off trailing '/'
|
248
|
-
|
249
|
-
$: << libs_path unless $:.index(libs_path) # add in this ones real require path, so that neighboring autoloads will work
|
250
|
-
known_locs_dir = File.dirname(known_loc)
|
251
|
-
$: << known_locs_dir unless $:.index(known_locs_dir) # attempt to avoid the regin loading bug...yipes.
|
252
|
-
|
253
|
-
# try some more autoload conivings...so that it won't attempt to autoload if it runs into it later...
|
254
|
-
relative_full_path = known_loc.sub(libs_path, '')[1..-1]
|
255
|
-
$LOADED_FEATURES << relative_full_path unless $LOADED_FEATURES.index(relative_full_path) # add in with .rb, too, for autoload
|
256
|
-
|
257
|
-
# load(known_loc, false) # too slow
|
258
|
-
|
259
|
-
# use eval: if this fails to load breaks re-save the offending file in binary mode, or file an issue on the faster_require tracker...
|
260
|
-
contents = File.open(known_loc, 'rb') {|f| f.read} # read only costs 0.34/10.0 s...
|
261
|
-
if contents =~ /require_relative/ # =~ is faster apparently faster than .include?
|
262
|
-
load(known_loc, false) # load is slow, but overcomes a ruby core bug: http://redmine.ruby-lang.org/issues/4487
|
263
|
-
else
|
264
|
-
eval(contents, TOPLEVEL_BINDING, known_loc) # note the 'rb' here--this means it's reading .rb files as binary, which *typically* works...maybe unnecessary though?
|
265
|
-
end
|
266
|
-
ensure
|
267
|
-
raise 'unexpected' unless IN_PROCESS.pop == known_loc
|
268
|
-
end
|
269
|
-
return true
|
270
|
-
end
|
271
|
-
else
|
272
|
-
puts 'ignoring already loaded [circular require?] ' + known_loc + ' ' + lib if $FAST_REQUIRE_DEBUG
|
273
|
-
end
|
274
|
-
end
|
275
|
-
else
|
276
|
-
# we don't know the location--let Ruby's original require do the heavy lifting for us here
|
277
|
-
old = $LOADED_FEATURES.dup
|
278
|
-
p 'doing old non-known location require ' + lib if $FAST_REQUIRE_DEBUG
|
279
|
-
if(original_non_cached_require(lib))
|
280
|
-
# debugger might land here the first time you run a script and it doesn't have a require
|
281
|
-
# cached yet...
|
282
|
-
new = $LOADED_FEATURES - old
|
283
|
-
found = new.last
|
284
|
-
|
285
|
-
# incredibly, in 1.8.x, this doesn't always get set to a full path.
|
286
|
-
if RUBY_VERSION < '1.9'
|
287
|
-
if !File.file?(found)
|
288
|
-
# discover the full path.
|
289
|
-
dir = $:.find{|path| File.file?(path + '/' + found)}
|
290
|
-
return true unless dir # give up, case jruby socket.jar "mysterious"
|
291
|
-
found = dir + '/' + found
|
292
|
-
end
|
293
|
-
found = File.expand_path(found);
|
294
|
-
end
|
295
|
-
puts 'found new loc:' + lib + '=>' + found if $FAST_REQUIRE_DEBUG
|
296
|
-
@@require_locs[lib] = found
|
297
|
-
@@already_loaded[found] = true
|
298
|
-
return true
|
299
|
-
else
|
300
|
-
|
301
|
-
# this is expected if it's for libraries required before faster_require was [like rbconfig]
|
302
|
-
# raise 'actually expected' + lib if RUBY_VERSION >= '1.9.0'
|
303
|
-
puts 'already loaded, apparently [require returned false], trying to discover how it was redundant... ' + lib if $FAST_REQUIRE_DEBUG
|
304
|
-
# this probably was something like
|
305
|
-
# the first pass was require 'regdeferred'
|
306
|
-
# now it's a different require 'regdeferred.rb'
|
307
|
-
# which fails (or vice versa)
|
308
|
-
# so figure out why
|
309
|
-
# calc location, expand, map back
|
310
|
-
where_found = FastRequire.guess_discover(lib, true)
|
311
|
-
if where_found
|
312
|
-
puts 'inferred lib loc:' + lib + '=>' + where_found if $FAST_REQUIRE_DEBUG
|
313
|
-
@@require_locs[lib] = where_found
|
314
|
-
# unfortunately if it's our first pass
|
315
|
-
# and we are in the middle of a "real" require
|
316
|
-
# that is circular
|
317
|
-
# then $LOADED_FEATURES or (AFAIK) nothing will have been set
|
318
|
-
# for us to be able to assert that
|
319
|
-
# so...I think we'll end up
|
320
|
-
# just fudging for a bit
|
321
|
-
# raise 'not found' unless @@already_loaded[where_found] # should have already been set...I think...
|
322
|
-
else
|
323
|
-
if $FAST_REQUIRE_DEBUG
|
324
|
-
# happens for enumerator XXXX
|
325
|
-
puts 'unable to infer ' + lib + ' location' if $FAST_REQUIRE_DEBUG
|
326
|
-
@@already_loaded[found] = true # so hacky...
|
327
|
-
end
|
328
|
-
end
|
329
|
-
return false # XXXX test all these return values
|
330
|
-
end
|
331
|
-
end
|
332
|
-
ensure
|
333
|
-
raise 'huh' unless ALL_IN_PROCESS.pop[0] == lib
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
|
-
end
|
338
|
-
|
339
|
-
module Kernel
|
340
|
-
|
341
|
-
# overwrite old require...
|
342
|
-
include FastRequire
|
343
|
-
if defined?(gem_original_require)
|
344
|
-
class << self
|
345
|
-
alias :original_remove_method :remove_method
|
346
|
-
|
347
|
-
def remove_method method # I think this actually might be needed <sigh>
|
348
|
-
if method.to_s == 'require'
|
349
|
-
#p 'not removing old require, since that\'s ours now'
|
350
|
-
else
|
351
|
-
original_remove_method method
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
end
|
356
|
-
|
357
|
-
# similarly overwrite this one...I guess...1.9.x...rubygems uses this as its default...I think...
|
358
|
-
alias :original_non_cached_require :gem_original_require
|
359
|
-
alias :gem_original_require :require_cached
|
360
|
-
else
|
361
|
-
alias :original_non_cached_require :require
|
362
|
-
alias :require :require_cached
|
363
|
-
end
|
364
|
-
end
|
365
|
-
|
1
|
+
# check for and avoid a double load...because we're afraid to load twice, since we override require et al
|
2
|
+
|
3
|
+
if(defined?($already_using_faster_require))
|
4
|
+
p 'warning: faster_require double load--expected?' if $FAST_REQUIRE_DEBUG
|
5
|
+
local_version = File.read(File.dirname(__FILE__) + "/../VERSION")
|
6
|
+
raise "mismatched faster_require versions! #{local_version} != #{FastRequire::VERSION}" unless local_version == FastRequire::VERSION
|
7
|
+
else
|
8
|
+
|
9
|
+
$already_using_faster_require = true
|
10
|
+
|
11
|
+
|
12
|
+
require 'rbconfig' # maybe could cache this one's loc, too? probably not...
|
13
|
+
|
14
|
+
module FastRequire
|
15
|
+
|
16
|
+
$FAST_REQUIRE_DEBUG ||= $DEBUG # can set this via $DEBUG, or on its own previously
|
17
|
+
|
18
|
+
VERSION = File.read(File.dirname(__FILE__) + "/../VERSION")
|
19
|
+
|
20
|
+
def self.sanitize filename
|
21
|
+
filename.gsub(/[\/:]/, '_')
|
22
|
+
end
|
23
|
+
|
24
|
+
if RUBY_VERSION >= '1.9.0'
|
25
|
+
# appears 1.9.x has inconsistent string hashes...so roll our own...
|
26
|
+
def self.string_array_cruddy_hash strings
|
27
|
+
# we only call this method once, so overflowing to a bignum is ok
|
28
|
+
hash = 1;
|
29
|
+
for string in strings
|
30
|
+
hash = hash * 31
|
31
|
+
string.each_byte{|b|
|
32
|
+
hash += b
|
33
|
+
}
|
34
|
+
end
|
35
|
+
hash # probably a Bignum (sigh)
|
36
|
+
end
|
37
|
+
|
38
|
+
else
|
39
|
+
|
40
|
+
def self.string_array_cruddy_hash strings
|
41
|
+
strings.hash
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.setup
|
47
|
+
begin
|
48
|
+
@@dir = File.expand_path('~/.ruby_faster_require_cache')
|
49
|
+
rescue ArgumentError => e # couldn't find HOME environment or the like
|
50
|
+
whoami = `whoami`.strip
|
51
|
+
if File.directory?(home = "/home/#{whoami}")
|
52
|
+
@@dir = home + '/.ruby_faster_require_cache'
|
53
|
+
else
|
54
|
+
raise e.to_s + " and couldnt infer it from whoami"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
unless File.directory?(@@dir)
|
59
|
+
Dir.mkdir @@dir
|
60
|
+
raise 'unable to create user dir for faster_require ' + @@dir unless File.directory?(@@dir)
|
61
|
+
end
|
62
|
+
|
63
|
+
config = RbConfig::CONFIG
|
64
|
+
|
65
|
+
# try to be a unique, but not too long, filename, for restrictions on filename length in doze
|
66
|
+
ruby_bin_name = config['bindir'] + config['ruby_install_name'] # needed if you have two rubies, same box, same ruby description [version, patch number]
|
67
|
+
parts = [File.basename($0), RUBY_PATCHLEVEL.to_s, RUBY_PLATFORM, RUBY_VERSION, RUBY_VERSION, File.expand_path(File.dirname($0)), ruby_bin_name]
|
68
|
+
unless defined?($faster_require_ignore_pwd_for_cache)
|
69
|
+
# add in Dir.pwd
|
70
|
+
parts << File.basename(Dir.pwd)
|
71
|
+
parts << Dir.pwd
|
72
|
+
else
|
73
|
+
p 'ignoring dirpwd for cached file location' if $FAST_REQUIRE_DEBUG
|
74
|
+
end
|
75
|
+
|
76
|
+
sanitized_parts = parts.map{|part| sanitize(part)}
|
77
|
+
|
78
|
+
full_parts_hash = string_array_cruddy_hash(parts).to_s
|
79
|
+
|
80
|
+
loc_name = (sanitized_parts.map{|part| part[0..5] + (part[-5..-1] || '')}).join('-') + '-' + full_parts_hash + '.marsh'
|
81
|
+
|
82
|
+
@@loc = @@dir + '/' + loc_name
|
83
|
+
|
84
|
+
if File.exist?(@@loc)
|
85
|
+
FastRequire.load @@loc
|
86
|
+
else
|
87
|
+
@@require_locs = {}
|
88
|
+
end
|
89
|
+
|
90
|
+
@@already_loaded = {}
|
91
|
+
|
92
|
+
$LOADED_FEATURES.each{|already_loaded|
|
93
|
+
# in 1.8 they might be partial paths
|
94
|
+
# in 1.9, they might be non collapsed paths
|
95
|
+
# so we have to sanitize them here...
|
96
|
+
# XXXX File.exist? is a bit too loose, here...
|
97
|
+
if File.exist?(already_loaded)
|
98
|
+
key = File.expand_path(already_loaded)
|
99
|
+
else
|
100
|
+
key = FastRequire.guess_discover(already_loaded) || already_loaded
|
101
|
+
end
|
102
|
+
@@already_loaded[key] = true
|
103
|
+
}
|
104
|
+
|
105
|
+
@@already_loaded[File.expand_path(__FILE__)] = true # this file itself isn't in loaded features, yet, but very soon will be..
|
106
|
+
# a special case--I hope...
|
107
|
+
|
108
|
+
# also disallow re-loading $0
|
109
|
+
@@require_locs[$0] = File.expand_path($0) # so when we run into $0 on a freak require, we will skip it...
|
110
|
+
@@already_loaded[File.expand_path($0)] = true
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.load filename
|
115
|
+
cached_marshal_data = File.open(filename, 'rb') {|f| f.read}
|
116
|
+
begin
|
117
|
+
@@require_locs = Marshal.restore( cached_marshal_data )
|
118
|
+
rescue ArgumentError
|
119
|
+
@@require_locs= {}
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
# try to see where this file was loaded from, from $:
|
125
|
+
# partial_name might be abc.rb, or might be abc
|
126
|
+
# partial_name might be a full path, too
|
127
|
+
def self.guess_discover partial_name, add_dot_rb = false
|
128
|
+
|
129
|
+
# test for full path first
|
130
|
+
# unfortunately it has to be a full separate test
|
131
|
+
# for windoze sake, as drive letter could be different than slapping a '/' on the dir to test list...
|
132
|
+
tests = [partial_name]
|
133
|
+
|
134
|
+
if add_dot_rb
|
135
|
+
tests << partial_name + '.rb'
|
136
|
+
tests << partial_name + '.' + RbConfig::CONFIG['DLEXT']
|
137
|
+
end
|
138
|
+
|
139
|
+
tests.each{|b|
|
140
|
+
# assume that .rb.rb is...valid...?
|
141
|
+
if File.file?(b) && ((b[-3..-1] == '.rb') || (b[-3..-1] == '.' + RbConfig::CONFIG['DLEXT']))
|
142
|
+
return File.expand_path(b)
|
143
|
+
end
|
144
|
+
}
|
145
|
+
|
146
|
+
for dir in $:
|
147
|
+
if File.file?(b = (dir + '/' + partial_name))
|
148
|
+
# make sure we require a file that has the right suffix...
|
149
|
+
if (b[-3..-1] == '.rb') || (b[-3..-1] == '.' + RbConfig::CONFIG['DLEXT'])
|
150
|
+
return File.expand_path(b)
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
if add_dot_rb && (partial_name[-3..-1] != '.rb') && (partial_name[-3..-1] != '.' + RbConfig::CONFIG['DLEXT'])
|
157
|
+
guess_discover(partial_name + '.rb') || guess_discover(partial_name + '.')
|
158
|
+
else
|
159
|
+
nil
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
FastRequire.setup
|
164
|
+
|
165
|
+
def self.already_loaded
|
166
|
+
@@already_loaded
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.require_locs
|
170
|
+
@@require_locs
|
171
|
+
end
|
172
|
+
|
173
|
+
def self.dir
|
174
|
+
@@dir
|
175
|
+
end
|
176
|
+
|
177
|
+
def self.loc
|
178
|
+
@@loc
|
179
|
+
end
|
180
|
+
|
181
|
+
at_exit {
|
182
|
+
FastRequire.default_save
|
183
|
+
}
|
184
|
+
|
185
|
+
def self.default_save
|
186
|
+
self.save @@loc
|
187
|
+
end
|
188
|
+
|
189
|
+
def self.save to_file
|
190
|
+
File.open(to_file, 'wb'){|f| f.write Marshal.dump(@@require_locs)}
|
191
|
+
end
|
192
|
+
|
193
|
+
# for testing use only, basically
|
194
|
+
def self.clear_all!
|
195
|
+
require 'fileutils'
|
196
|
+
success = false
|
197
|
+
if File.exist? @@dir
|
198
|
+
FileUtils.rm_rf @@dir
|
199
|
+
success = true
|
200
|
+
end
|
201
|
+
@@require_locs.clear
|
202
|
+
setup
|
203
|
+
success
|
204
|
+
end
|
205
|
+
|
206
|
+
private
|
207
|
+
def last_caller
|
208
|
+
caller[-2]
|
209
|
+
end
|
210
|
+
|
211
|
+
IN_PROCESS = []
|
212
|
+
ALL_IN_PROCESS = []
|
213
|
+
@@count = 0
|
214
|
+
|
215
|
+
public
|
216
|
+
|
217
|
+
def require_cached lib
|
218
|
+
lib = lib.to_s # might not be zactly 1.9 compat... to_path ??
|
219
|
+
ALL_IN_PROCESS << [lib, @@count += 1]
|
220
|
+
begin
|
221
|
+
p 'doing require ' + lib + ' from ' + caller[-1] if $FAST_REQUIRE_DEBUG
|
222
|
+
if known_loc = @@require_locs[lib]
|
223
|
+
if @@already_loaded[known_loc]
|
224
|
+
p 'already loaded ' + known_loc + ' ' + lib if $FAST_REQUIRE_DEBUG
|
225
|
+
return false
|
226
|
+
end
|
227
|
+
@@already_loaded[known_loc] = true
|
228
|
+
if known_loc =~ /\.#{RbConfig::CONFIG['DLEXT']}$/
|
229
|
+
puts 'doing original_non_cached_require on .so full path ' + known_loc if $FAST_REQUIRE_DEBUG
|
230
|
+
original_non_cached_require known_loc # not much we can do there...too bad...well at least we pass it a full path though :P
|
231
|
+
else
|
232
|
+
unless $LOADED_FEATURES.include? known_loc
|
233
|
+
if known_loc =~ /rubygems.rb$/
|
234
|
+
puts 'requiring rubygems ' + lib if $FAST_REQUIRE_DEBUG
|
235
|
+
original_non_cached_require(lib) # revert to normal require so rubygems doesn't freak out when it finds itself already in $LOADED_FEATURES with rubygems > 1.6 :P
|
236
|
+
else
|
237
|
+
IN_PROCESS << known_loc
|
238
|
+
begin
|
239
|
+
if $FAST_REQUIRE_DEBUG
|
240
|
+
puts 'doing cached loc eval on ' + lib + '=>' + known_loc + " with stack:" + IN_PROCESS.join(' ')
|
241
|
+
end
|
242
|
+
$LOADED_FEATURES << known_loc
|
243
|
+
# fakely add the load path, too, so that autoload for the same file/path in gems will work <sigh> [rspec2]
|
244
|
+
no_suffix_full_path = known_loc.gsub(/\.[^.]+$/, '')
|
245
|
+
no_suffix_lib = lib.gsub(/\.[^.]+$/, '')
|
246
|
+
libs_path = no_suffix_full_path.gsub(no_suffix_lib, '')
|
247
|
+
libs_path = File.expand_path(libs_path) # strip off trailing '/'
|
248
|
+
|
249
|
+
$: << libs_path unless $:.index(libs_path) # add in this ones real require path, so that neighboring autoloads will work
|
250
|
+
known_locs_dir = File.dirname(known_loc)
|
251
|
+
$: << known_locs_dir unless $:.index(known_locs_dir) # attempt to avoid the regin loading bug...yipes.
|
252
|
+
|
253
|
+
# try some more autoload conivings...so that it won't attempt to autoload if it runs into it later...
|
254
|
+
relative_full_path = known_loc.sub(libs_path, '')[1..-1]
|
255
|
+
$LOADED_FEATURES << relative_full_path unless $LOADED_FEATURES.index(relative_full_path) # add in with .rb, too, for autoload
|
256
|
+
|
257
|
+
# load(known_loc, false) # too slow
|
258
|
+
|
259
|
+
# use eval: if this fails to load breaks re-save the offending file in binary mode, or file an issue on the faster_require tracker...
|
260
|
+
contents = File.open(known_loc, 'rb') {|f| f.read} # read only costs 0.34/10.0 s...
|
261
|
+
if contents =~ /require_relative/ # =~ is faster apparently faster than .include?
|
262
|
+
load(known_loc, false) # load is slow, but overcomes a ruby core bug: http://redmine.ruby-lang.org/issues/4487
|
263
|
+
else
|
264
|
+
Kernel.eval(contents, TOPLEVEL_BINDING, known_loc) # note the 'rb' here--this means it's reading .rb files as binary, which *typically* works...maybe unnecessary though?
|
265
|
+
end
|
266
|
+
ensure
|
267
|
+
raise 'unexpected' unless IN_PROCESS.pop == known_loc
|
268
|
+
end
|
269
|
+
return true
|
270
|
+
end
|
271
|
+
else
|
272
|
+
puts 'ignoring already loaded [circular require?] ' + known_loc + ' ' + lib if $FAST_REQUIRE_DEBUG
|
273
|
+
end
|
274
|
+
end
|
275
|
+
else
|
276
|
+
# we don't know the location--let Ruby's original require do the heavy lifting for us here
|
277
|
+
old = $LOADED_FEATURES.dup
|
278
|
+
p 'doing old non-known location require ' + lib if $FAST_REQUIRE_DEBUG
|
279
|
+
if(original_non_cached_require(lib))
|
280
|
+
# debugger might land here the first time you run a script and it doesn't have a require
|
281
|
+
# cached yet...
|
282
|
+
new = $LOADED_FEATURES - old
|
283
|
+
found = new.last
|
284
|
+
|
285
|
+
# incredibly, in 1.8.x, this doesn't always get set to a full path.
|
286
|
+
if RUBY_VERSION < '1.9'
|
287
|
+
if !File.file?(found)
|
288
|
+
# discover the full path.
|
289
|
+
dir = $:.find{|path| File.file?(path + '/' + found)}
|
290
|
+
return true unless dir # give up, case jruby socket.jar "mysterious"
|
291
|
+
found = dir + '/' + found
|
292
|
+
end
|
293
|
+
found = File.expand_path(found);
|
294
|
+
end
|
295
|
+
puts 'found new loc:' + lib + '=>' + found if $FAST_REQUIRE_DEBUG
|
296
|
+
@@require_locs[lib] = found
|
297
|
+
@@already_loaded[found] = true
|
298
|
+
return true
|
299
|
+
else
|
300
|
+
|
301
|
+
# this is expected if it's for libraries required before faster_require was [like rbconfig]
|
302
|
+
# raise 'actually expected' + lib if RUBY_VERSION >= '1.9.0'
|
303
|
+
puts 'already loaded, apparently [require returned false], trying to discover how it was redundant... ' + lib if $FAST_REQUIRE_DEBUG
|
304
|
+
# this probably was something like
|
305
|
+
# the first pass was require 'regdeferred'
|
306
|
+
# now it's a different require 'regdeferred.rb'
|
307
|
+
# which fails (or vice versa)
|
308
|
+
# so figure out why
|
309
|
+
# calc location, expand, map back
|
310
|
+
where_found = FastRequire.guess_discover(lib, true)
|
311
|
+
if where_found
|
312
|
+
puts 'inferred lib loc:' + lib + '=>' + where_found if $FAST_REQUIRE_DEBUG
|
313
|
+
@@require_locs[lib] = where_found
|
314
|
+
# unfortunately if it's our first pass
|
315
|
+
# and we are in the middle of a "real" require
|
316
|
+
# that is circular
|
317
|
+
# then $LOADED_FEATURES or (AFAIK) nothing will have been set
|
318
|
+
# for us to be able to assert that
|
319
|
+
# so...I think we'll end up
|
320
|
+
# just fudging for a bit
|
321
|
+
# raise 'not found' unless @@already_loaded[where_found] # should have already been set...I think...
|
322
|
+
else
|
323
|
+
if $FAST_REQUIRE_DEBUG
|
324
|
+
# happens for enumerator XXXX
|
325
|
+
puts 'unable to infer ' + lib + ' location' if $FAST_REQUIRE_DEBUG
|
326
|
+
@@already_loaded[found] = true # so hacky...
|
327
|
+
end
|
328
|
+
end
|
329
|
+
return false # XXXX test all these return values
|
330
|
+
end
|
331
|
+
end
|
332
|
+
ensure
|
333
|
+
raise 'huh' unless ALL_IN_PROCESS.pop[0] == lib
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
end
|
338
|
+
|
339
|
+
module Kernel
|
340
|
+
|
341
|
+
# overwrite old require...
|
342
|
+
include FastRequire
|
343
|
+
if defined?(gem_original_require)
|
344
|
+
class << self
|
345
|
+
alias :original_remove_method :remove_method
|
346
|
+
|
347
|
+
def remove_method method # I think this actually might be needed <sigh>
|
348
|
+
if method.to_s == 'require'
|
349
|
+
#p 'not removing old require, since that\'s ours now'
|
350
|
+
else
|
351
|
+
original_remove_method method
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
end
|
356
|
+
|
357
|
+
# similarly overwrite this one...I guess...1.9.x...rubygems uses this as its default...I think...
|
358
|
+
alias :original_non_cached_require :gem_original_require
|
359
|
+
alias :gem_original_require :require_cached
|
360
|
+
else
|
361
|
+
alias :original_non_cached_require :require
|
362
|
+
alias :require :require_cached
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
366
|
end
|
metadata
CHANGED
@@ -1,183 +1,202 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: faster_require
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
|
-
- 2
|
10
|
-
version: 0.9.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.9.3
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Roger Pack
|
14
9
|
- faisal
|
15
|
-
autorequire:
|
10
|
+
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2012-12-03 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: redparse
|
23
|
-
|
24
|
-
|
17
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: !binary |-
|
22
|
+
MA==
|
23
|
+
none: false
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ! '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: !binary |-
|
29
|
+
MA==
|
25
30
|
none: false
|
26
|
-
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
31
|
+
prerelease: false
|
33
32
|
type: :development
|
34
|
-
|
35
|
-
- !ruby/object:Gem::Dependency
|
33
|
+
- !ruby/object:Gem::Dependency
|
36
34
|
name: activesupport
|
37
|
-
|
38
|
-
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.3.10
|
39
40
|
none: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 2
|
46
|
-
- 3
|
47
|
-
- 10
|
41
|
+
requirement: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
48
45
|
version: 2.3.10
|
46
|
+
none: false
|
47
|
+
prerelease: false
|
49
48
|
type: :development
|
50
|
-
|
51
|
-
- !ruby/object:Gem::Dependency
|
49
|
+
- !ruby/object:Gem::Dependency
|
52
50
|
name: actionpack
|
53
|
-
|
54
|
-
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.3.10
|
55
56
|
none: false
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
segments:
|
61
|
-
- 2
|
62
|
-
- 3
|
63
|
-
- 10
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
64
61
|
version: 2.3.10
|
62
|
+
none: false
|
63
|
+
prerelease: false
|
65
64
|
type: :development
|
66
|
-
|
67
|
-
- !ruby/object:Gem::Dependency
|
65
|
+
- !ruby/object:Gem::Dependency
|
68
66
|
name: jeweler
|
69
|
-
|
70
|
-
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: !binary |-
|
72
|
+
MA==
|
71
73
|
none: false
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: !binary |-
|
79
|
+
MA==
|
80
|
+
none: false
|
81
|
+
prerelease: false
|
79
82
|
type: :development
|
80
|
-
|
81
|
-
- !ruby/object:Gem::Dependency
|
83
|
+
- !ruby/object:Gem::Dependency
|
82
84
|
name: rspec
|
83
|
-
|
84
|
-
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: !binary |-
|
90
|
+
Mg==
|
91
|
+
none: false
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: !binary |-
|
97
|
+
Mg==
|
85
98
|
none: false
|
86
|
-
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
hash: 7
|
90
|
-
segments:
|
91
|
-
- 2
|
92
|
-
version: "2"
|
99
|
+
prerelease: false
|
93
100
|
type: :development
|
94
|
-
|
95
|
-
- !ruby/object:Gem::Dependency
|
101
|
+
- !ruby/object:Gem::Dependency
|
96
102
|
name: sane
|
97
|
-
|
98
|
-
|
103
|
+
version_requirements: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: !binary |-
|
108
|
+
MA==
|
99
109
|
none: false
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
110
|
+
requirement: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: !binary |-
|
115
|
+
MA==
|
116
|
+
none: false
|
117
|
+
prerelease: false
|
107
118
|
type: :development
|
108
|
-
|
109
|
-
- !ruby/object:Gem::Dependency
|
119
|
+
- !ruby/object:Gem::Dependency
|
110
120
|
name: facets
|
111
|
-
|
112
|
-
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: !binary |-
|
126
|
+
MA==
|
127
|
+
none: false
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: !binary |-
|
133
|
+
MA==
|
113
134
|
none: false
|
114
|
-
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
hash: 3
|
118
|
-
segments:
|
119
|
-
- 0
|
120
|
-
version: "0"
|
135
|
+
prerelease: false
|
121
136
|
type: :development
|
122
|
-
|
123
|
-
- !ruby/object:Gem::Dependency
|
137
|
+
- !ruby/object:Gem::Dependency
|
124
138
|
name: ruby-prof
|
125
|
-
|
126
|
-
|
139
|
+
version_requirements: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: !binary |-
|
144
|
+
MA==
|
127
145
|
none: false
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
146
|
+
requirement: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ! '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: !binary |-
|
151
|
+
MA==
|
152
|
+
none: false
|
153
|
+
prerelease: false
|
135
154
|
type: :development
|
136
|
-
|
137
|
-
- !ruby/object:Gem::Dependency
|
155
|
+
- !ruby/object:Gem::Dependency
|
138
156
|
name: rack-mount
|
139
|
-
|
140
|
-
|
157
|
+
version_requirements: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - '='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: 0.6.14
|
141
162
|
none: false
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
segments:
|
147
|
-
- 0
|
148
|
-
- 6
|
149
|
-
- 14
|
163
|
+
requirement: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - '='
|
166
|
+
- !ruby/object:Gem::Version
|
150
167
|
version: 0.6.14
|
168
|
+
none: false
|
169
|
+
prerelease: false
|
151
170
|
type: :development
|
152
|
-
|
153
|
-
- !ruby/object:Gem::Dependency
|
171
|
+
- !ruby/object:Gem::Dependency
|
154
172
|
name: rack
|
155
|
-
|
156
|
-
|
173
|
+
version_requirements: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - '='
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: 1.2.2
|
157
178
|
none: false
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
segments:
|
163
|
-
- 1
|
164
|
-
- 2
|
165
|
-
- 2
|
179
|
+
requirement: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - '='
|
182
|
+
- !ruby/object:Gem::Version
|
166
183
|
version: 1.2.2
|
184
|
+
none: false
|
185
|
+
prerelease: false
|
167
186
|
type: :development
|
168
|
-
version_requirements: *id010
|
169
187
|
description: A tool designed to speedup library loading (startup time) in Ruby by caching library locations
|
170
188
|
email: rogerdpack@gmail.com
|
171
|
-
executables:
|
189
|
+
executables:
|
172
190
|
- faster_require
|
173
191
|
extensions: []
|
174
|
-
|
175
|
-
extra_rdoc_files:
|
192
|
+
extra_rdoc_files:
|
176
193
|
- ChangeLog
|
194
|
+
- LICENSE
|
177
195
|
- README
|
178
196
|
- TODO
|
179
|
-
files:
|
197
|
+
files:
|
180
198
|
- ChangeLog
|
199
|
+
- LICENSE
|
181
200
|
- README
|
182
201
|
- Rakefile
|
183
202
|
- VERSION
|
@@ -219,63 +238,28 @@ files:
|
|
219
238
|
- TODO
|
220
239
|
homepage: http://github.com/rdp/faster_require
|
221
240
|
licenses: []
|
222
|
-
|
223
|
-
post_install_message:
|
241
|
+
post_install_message:
|
224
242
|
rdoc_options: []
|
225
|
-
|
226
|
-
require_paths:
|
243
|
+
require_paths:
|
227
244
|
- lib
|
228
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
245
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - ! '>='
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: !binary |-
|
250
|
+
MA==
|
229
251
|
none: false
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
version: "0"
|
237
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
252
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
253
|
+
requirements:
|
254
|
+
- - ! '>='
|
255
|
+
- !ruby/object:Gem::Version
|
256
|
+
version: !binary |-
|
257
|
+
MA==
|
238
258
|
none: false
|
239
|
-
requirements:
|
240
|
-
- - ">="
|
241
|
-
- !ruby/object:Gem::Version
|
242
|
-
hash: 3
|
243
|
-
segments:
|
244
|
-
- 0
|
245
|
-
version: "0"
|
246
259
|
requirements: []
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
signing_key:
|
260
|
+
rubyforge_project:
|
261
|
+
rubygems_version: 1.8.24
|
262
|
+
signing_key:
|
251
263
|
specification_version: 3
|
252
264
|
summary: Speed library loading in Ruby
|
253
|
-
test_files:
|
254
|
-
- spec/files/a_requires_b.rb
|
255
|
-
- spec/files/active_support_no_double_load.rb
|
256
|
-
- spec/files/attempt_double_load.rb
|
257
|
-
- spec/files/attempt_double_load_wrong_version.rb
|
258
|
-
- spec/files/b.rb
|
259
|
-
- spec/files/c.rb
|
260
|
-
- spec/files/d.rb
|
261
|
-
- spec/files/e.rb
|
262
|
-
- spec/files/fast.rb
|
263
|
-
- spec/files/fast2.rb
|
264
|
-
- spec/files/file_that_sets_ignore_pwd_flag.rb
|
265
|
-
- spec/files/gem_after.rb
|
266
|
-
- spec/files/gem_before.rb
|
267
|
-
- spec/files/large.rb
|
268
|
-
- spec/files/load_various_gems.rb
|
269
|
-
- spec/files/load_various_gems2.rb
|
270
|
-
- spec/files/non_dot_rb.rb
|
271
|
-
- spec/files/regin_gem.rb
|
272
|
-
- spec/files/require_facets.rb
|
273
|
-
- spec/files/require_full_path.rb
|
274
|
-
- spec/files/require_non_dot_rb_fails.rb
|
275
|
-
- spec/files/require_twice_in_dir_pwd.rb
|
276
|
-
- spec/files/requires_itself.rb
|
277
|
-
- spec/files/should_put_modules_in_right_place.rb
|
278
|
-
- spec/files/slow.rb
|
279
|
-
- spec/files/socket_load.rb
|
280
|
-
- spec/files/time_just_loading_rubygems.rb
|
281
|
-
- spec/spec.fast_require.rb
|
265
|
+
test_files: []
|