faster_require 0.5.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.
data/README ADDED
@@ -0,0 +1,51 @@
1
+ A little utility to make
2
+
3
+ require 'xxx'
4
+
5
+ take much less time.
6
+
7
+ Well, mostly on windows--on linux it's a speedup of only 0.41 to 0.45s, or so. [1]
8
+
9
+ If you've ever wondered why ruby feels slow on doze...sometimes it's just the startup time. This helps.
10
+
11
+ Benchmarks:
12
+
13
+ loading a spec file:
14
+
15
+ 1.9.1
16
+ without 3.20s
17
+ with 0.34s (10x improvement)
18
+
19
+ 1.8.6
20
+ without 3.6s
21
+ with 1.25s
22
+
23
+
24
+ rails app, running script/console "puts 333"
25
+
26
+ 1.9.1
27
+ without:
28
+ 20s
29
+ with:
30
+ 10s
31
+
32
+ 1.8.6
33
+ without:
34
+ 9s
35
+ with:
36
+ 6s
37
+
38
+ rake -T
39
+
40
+ 1.9.1
41
+ without: 3.75s
42
+ with: 1.5s
43
+
44
+ 1.8.6
45
+ without: 1.37s
46
+ with: 1.25s
47
+
48
+ Note: in reality what we should do is fix core so that it doesn't have such awful I/O time in windows. There may be some gross inefficiency in there. For now, this is a work-around.
49
+
50
+ [1] A sister project to this one, faster_gem_script, can make ruby scripts in linux run faster by 0.1s :) http://github.com/rdp/faster_gem_script
51
+ (in windows it's a much higher gain). Eventually they'll be combined into one "gem optimizer" gem.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'faster_rubygems' if RUBY_VERSION < "1.9'"
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |s|
4
+ s.name = "faster_require"
5
+ s.summary = "A tool designed to speedup library loading in Ruby by caching library locations"
6
+ s.email = "rogerdpack@gmail.com"
7
+ s.homepage = "http://github.com/rdp/faster_require"
8
+ s.authors = ["Roger Pack"]
9
+ s.add_development_dependency 'rspec'
10
+ s.add_development_dependency 'sane'
11
+ s.add_development_dependency 'ruby-prof'
12
+ # s.add_dependency
13
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.5.0
data/bin/fast_require ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'faster_require'
3
+ FastRequire.clear_all!
4
+ puts 'successfully cleared faster_require cache: (' + FastRequire.dir + ')'
@@ -0,0 +1,213 @@
1
+ module FastRequire
2
+ $FAST_REQUIRE_DEBUG ||= false
3
+
4
+ def self.setup
5
+ @@dir = File.expand_path('~/.ruby_faster_require_cache')
6
+
7
+ Dir.mkdir @@dir unless File.directory?(@@dir)
8
+ @@loc = @@dir + '/' + RUBY_VERSION + '-' + RUBY_PLATFORM + '-' +
9
+ sanitize(File.expand_path($0).gsub(/[\/:]/, '_')) +
10
+ sanitize(Dir.pwd)
11
+ end
12
+
13
+ def self.sanitize filename
14
+ filename.gsub(/[\/:]/, '_')
15
+ end
16
+
17
+ FastRequire.setup
18
+
19
+ def self.load filename
20
+ @@require_locs = Marshal.restore( File.open(filename, 'rb') {|f| f.read})
21
+ end
22
+
23
+ if File.exist?(@@loc)
24
+ FastRequire.load @@loc
25
+ else
26
+ @@require_locs = {}
27
+ end
28
+
29
+ @@already_loaded = {}
30
+
31
+ # try to see where this file was loaded from, from $:
32
+ # partial_name might be abc.rb, or might be abc
33
+ # partial_name might be a full path, too
34
+ def self.guess_discover partial_name, add_dot_rb = false
35
+
36
+ # test for full path first
37
+ # unfortunately it has to be a full separate test
38
+ # for windoze sake, as drive letter could be different than slapping a '/' on the dir to test list...
39
+ tests = [partial_name]
40
+
41
+ if add_dot_rb
42
+ tests << partial_name + '.rb'
43
+ tests << partial_name + '.so'
44
+ end
45
+
46
+ tests.each{|b|
47
+ # assume that .rb.rb is...valid...
48
+ if File.file?(b) && ((b[-3..-1] == '.rb') || (b[-3..-1] == '.so'))
49
+ return File.expand_path(b)
50
+ end
51
+ }
52
+
53
+ for dir in $:
54
+ if File.file?(b = (dir + '/' + partial_name))
55
+ # make sure we require a file that has the right suffix...
56
+ if (b[-3..-1] == '.rb') || (b[-3..-1] == '.so')
57
+ return File.expand_path(b)
58
+ end
59
+
60
+ end
61
+ end
62
+
63
+ if add_dot_rb && (partial_name[-3..-1] != '.rb') && (partial_name[-3..-1] != '.so')
64
+ guess_discover(partial_name + '.rb') || guess_discover(partial_name + '.so')
65
+ else
66
+ nil
67
+ end
68
+ end
69
+
70
+ $LOADED_FEATURES.each{|already_loaded|
71
+ # in 1.8 they might be partial paths
72
+ # in 1.9, they might be non collapsed paths
73
+ # so we have to sanitize them here...
74
+ # XXXX File.exist? is a bit too loose, here...
75
+ if File.exist?(already_loaded)
76
+ key = File.expand_path(already_loaded)
77
+ else
78
+ key = FastRequire.guess_discover(already_loaded) || already_loaded
79
+ end
80
+ @@already_loaded[key] = true
81
+ }
82
+
83
+ @@already_loaded[File.expand_path(__FILE__)] = true # this file itself isn't in loaded features, yet, but very soon will be..
84
+ # special case--I hope...
85
+
86
+ # disallow re-requiring $0
87
+ @@require_locs[$0] = File.expand_path($0) # so when we run into it on a require, we will skip it...
88
+ @@already_loaded[File.expand_path($0)] = true
89
+
90
+
91
+ # XXXX within a very long depth to require fast_require,
92
+ # require 'a' => 'b' => 'c' => 'd' & fast_require
93
+ # then
94
+ # => 'b.rb'
95
+ # it works always
96
+
97
+ def self.already_loaded
98
+ @@already_loaded
99
+ end
100
+
101
+ def self.require_locs
102
+ @@require_locs
103
+ end
104
+
105
+ def self.dir
106
+ @@dir
107
+ end
108
+
109
+ at_exit {
110
+ FastRequire.default_save
111
+ }
112
+
113
+ def self.default_save
114
+ self.save @@loc
115
+ end
116
+
117
+ def self.save to_file
118
+ File.open(to_file, 'wb'){|f| f.write Marshal.dump(@@require_locs)}
119
+ end
120
+
121
+ def self.clear_all!
122
+ require 'fileutils'
123
+ FileUtils.rm_rf @@dir if File.exist? @@dir
124
+ @@require_locs.clear
125
+ setup
126
+ end
127
+
128
+ def require_cached lib
129
+ lib = lib.to_s unless lib.is_a?(String) # might not be zactly 1.9 compat...
130
+ if known_loc = @@require_locs[lib]
131
+ return false if @@already_loaded[known_loc]
132
+ @@already_loaded[known_loc] = true
133
+ if known_loc =~ /.so$/
134
+ puts 'doing original_non_cached_require on .so full path ' + known_loc if $FAST_REQUIRE_DEBUG
135
+ original_non_cached_require known_loc # not much we can do there...too bad...
136
+ else
137
+ puts 'doing eval on ' + lib + '=>' + known_loc if $FAST_REQUIRE_DEBUG
138
+ $LOADED_FEATURES << known_loc # *must*
139
+ return eval(File.open(known_loc, 'rb') {|f| f.read}, TOPLEVEL_BINDING, known_loc) || true # note the b here--this means it's reading .rb files as binary, which *typically* works--if it breaks re-save the offending file in binary mode, or file an issue on the tracker...
140
+ end
141
+ else
142
+ # we don't know the location--let Ruby's original require do the heavy lifting for us here
143
+ old = $LOADED_FEATURES.dup
144
+ if(original_non_cached_require lib)
145
+ # debugger might land here the first time you run a script and it doesn't have a require
146
+ # cached yet...
147
+ new = $LOADED_FEATURES - old
148
+ found = new.last
149
+
150
+ # incredibly, in 1.8.6, this doesn't always get set to a full path
151
+ if RUBY_VERSION < '1.9'
152
+ if !File.file?(found)
153
+ # discover the full path.
154
+ dir = $:.find{|path| File.file?(path + '/' + found)}
155
+ found = dir + '/' + found
156
+ end
157
+ found = File.expand_path(found);
158
+ end
159
+ puts 'found new loc:' + lib + '=>' + found if $FAST_REQUIRE_DEBUG
160
+ @@require_locs[lib] = found
161
+ @@already_loaded[found] = true
162
+ return true
163
+ else
164
+ puts 'already loaded, apparently' + lib if $FAST_REQUIRE_DEBUG
165
+ # this probably was something like
166
+ # the first pass was require 'regdeferred'
167
+ # now it's a different require 'regdeferred.rb'
168
+ # which fails (or vice versa)
169
+ # so figure out why
170
+ # calc location, expand, map back
171
+ where_found = FastRequire.guess_discover(lib, true)
172
+ if where_found
173
+ puts 'inferred ghost loc:' + lib + '=>' + where_found if $FAST_REQUIRE_DEBUG
174
+ @@require_locs[lib] = where_found
175
+ # unfortunately if it's our first pass
176
+ # and we are in the middle of a "real" require
177
+ # that is circular
178
+ # then $LOADED_FEATURES or (AFAIK) nothing will have been set
179
+ # for us to be able to assert that
180
+ # so...I think we'll end up
181
+ # just fudging for a bit
182
+ # raise 'not found' unless @@already_loaded[where_found] # should have already been set...I think...
183
+ else
184
+ if $FAST_REQUIRE_DEBUG
185
+ # happens for enumerator XXXX
186
+ puts 'unable to infer' + lib + ' in ' if $FAST_REQUIRE_DEBUG
187
+ @@already_loaded[found] = true # hacky
188
+ end
189
+ end
190
+ return false # XXXX test all these return values
191
+ end
192
+ end
193
+ end
194
+
195
+ def self.resetup!
196
+ eval "module ::Kernel; alias :require :require_cached; end"
197
+ end
198
+ end
199
+
200
+ module Kernel
201
+
202
+ if(defined?(@already_using_faster_require))
203
+ raise 'twice not allowed...'
204
+ # *shouldn't* get here...unless I'm wrong...
205
+ else
206
+ @already_using_faster_require = true
207
+ include FastRequire
208
+ # overwrite old require...
209
+ alias :original_non_cached_require :require
210
+ FastRequire.resetup!
211
+ end
212
+
213
+ end
@@ -0,0 +1,5 @@
1
+ Gem.post_install { |gem_installer_instance|
2
+ require 'faster_require'
3
+ FastRequire.clear_all!
4
+ puts 'cleared faster_require caches due to new gem install...'
5
+ }
@@ -0,0 +1 @@
1
+ require 'b'
@@ -0,0 +1,4 @@
1
+ $FAST_REQUIRE_DEBUG = 1
2
+ a = File.dirname(File.expand_path(__FILE__)) + '/../../lib/fast_require.rb'
3
+ load a
4
+ load a
data/spec/files/b.rb ADDED
@@ -0,0 +1,4 @@
1
+ if defined?($b) && $b > 0
2
+ raise 'cannot require b twice'
3
+ end
4
+ $b = 1
data/spec/files/c.rb ADDED
@@ -0,0 +1,5 @@
1
+ if defined?($c)
2
+ raise 'cannot require twice'
3
+ else
4
+ $c = true
5
+ end
data/spec/files/d.rb ADDED
@@ -0,0 +1 @@
1
+ require 'faster_require'
data/spec/files/e.rb ADDED
@@ -0,0 +1 @@
1
+ require 'faster_require'
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require File.dirname(__FILE__) + "/../../lib/faster_require.rb"
3
+ require 'spec/autorun'
4
+ a = Spec
@@ -0,0 +1,8 @@
1
+ require '../lib/faster_require.rb'
2
+ require 'rubygems'
3
+ Gem::Specification
4
+
5
+ raise if FastRequire.already_loaded.to_a.flatten.grep(/files\/b.rb/).length > 0
6
+ require 'files/b.rb'
7
+ raise if(require 'files/b.rb')
8
+ raise unless FastRequire.already_loaded.to_a.flatten.grep(/files\/b.rb/).length > 0
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ Gem::Specification
3
+
4
+ require '../lib/faster_require.rb'
5
+
6
+ raise if FastRequire.already_loaded.to_a.flatten.grep(/files\/b.rb/).length > 0
7
+ require 'files/b.rb'
8
+ raise if(require 'files/b.rb')
9
+ raise unless FastRequire.already_loaded.to_a.flatten.grep(/files\/b.rb/).length > 0
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ require 'ruby-debug'
3
+ require File.dirname(File.expand_path(__FILE__)) + '/../../lib/faster_require.rb'
4
+ require 'stringio'
5
+ require 'redparse'
File without changes
@@ -0,0 +1,6 @@
1
+ require File.dirname(File.expand_path(__FILE__)) + '/../../lib/faster_require.rb'
2
+ raise if (require File.dirname(File.expand_path(__FILE__)) + '/../../lib/faster_require.rb') # another test, why not? :)
3
+ paths = [File.expand_path('b.rb'), File.expand_path('b')]
4
+ paths.each{|p| require p}
5
+ paths.each{|p| raise unless FastRequire.require_locs.keys.include?(p)}
6
+
@@ -0,0 +1,6 @@
1
+ $:.unshift 'bin'
2
+ require File.dirname(File.expand_path(__FILE__)) + '/../../lib/faster_require.rb'
3
+ require 'non_dot_rb.rb' # succeed
4
+ require 'non_dot_rb' # fails (well, returns false), we think it succeeds, but it in the wrong place, so when we run the second time, it loads the wrong file
5
+
6
+ # unless my gem is working right
@@ -0,0 +1,6 @@
1
+ require File.dirname(File.expand_path(__FILE__)) + '/../../lib/faster_require.rb'
2
+ raise if (require File.dirname(File.expand_path(__FILE__)) + '/../../lib/faster_require.rb') # another test, why not? :)
3
+ require 'b.rb'
4
+ require 'b'
5
+ raise unless FastRequire.require_locs.keys.include?('b.rb') && FastRequire.require_locs.keys.include?('b')
6
+
@@ -0,0 +1,4 @@
1
+ require '../lib/faster_require.rb'
2
+ raise if $already_here
3
+ $already_here = true
4
+ require $0
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'spec/autorun'
3
+ a = Spec
@@ -0,0 +1,153 @@
1
+ # $FAST_REQUIRE_DEBUG
2
+ if RUBY_VERSION < '1.9'
3
+ require 'faster_rubygems'
4
+ end
5
+ require 'sane'
6
+
7
+ cached = '.cached_spec_locs' + RUBY_VERSION
8
+ require_relative '../lib/faster_require'
9
+ # use it for our own local test specs
10
+ FastRequire.load cached if File.exist? cached
11
+ require 'spec/autorun'
12
+ require 'benchmark'
13
+ FastRequire.save cached
14
+
15
+ describe "faster requires" do
16
+
17
+ before do
18
+ FastRequire.clear_all!
19
+ @old_length = $LOADED_FEATURES.length
20
+ $b = 0
21
+ @ruby = OS.ruby_bin + " "
22
+ end
23
+
24
+ def with_file(filename = 'test')
25
+ FileUtils.touch filename + '.rb'
26
+ yield
27
+ FileUtils.rm filename + '.rb'
28
+ end
29
+
30
+ it "should be able to do a single require" do
31
+ Dir.chdir('files') do
32
+ old = $LOADED_FEATURES.dup
33
+ assert require('c')
34
+ assert !(require 'c')
35
+ new = $LOADED_FEATURES - old
36
+ raise new.inspect if new.length != 1
37
+ end
38
+ end
39
+
40
+ it "should be able to go two sub-requires deep appropriately" do
41
+ Dir.chdir('files') do
42
+ assert(require('a_requires_b'))
43
+ assert !(require 'a_requires_b')
44
+ assert !(require 'a_requires_b')
45
+ $b.should == 1
46
+ end
47
+ end
48
+
49
+ it "should be faster" do
50
+ Dir.chdir('files') do
51
+ slow = Benchmark.realtime { assert system("#{OS.ruby_bin} slow.rb")}
52
+ Benchmark.realtime { assert system("#{OS.ruby_bin} fast.rb")} # warmup
53
+ fast = Benchmark.realtime { assert system("#{OS.ruby_bin} fast.rb")}
54
+ pps 'fast', fast, 'slow', slow
55
+ assert fast < slow
56
+ end
57
+ end
58
+
59
+ it "should work with large complex gem" do
60
+ Dir.chdir('files') do
61
+ assert(system("#{OS.ruby_bin} large.rb"))
62
+ assert(system("#{OS.ruby_bin} large.rb"))
63
+ assert(system("#{OS.ruby_bin} large.rb"))
64
+ end
65
+ end
66
+
67
+ it "should not re-save the cache file if it hasn't changed [?]"
68
+
69
+ it "should require .so files still, and only load them once" do
70
+ # ruby-prof gem
71
+ 2.times { require 'ruby_prof'; RubyProf } # .so
72
+ assert $LOADED_FEATURES.length == (@old_length + 1)
73
+ end
74
+
75
+ it "should add requires to $LOADED_FEATURES" do
76
+ with_file('file2') {require 'file2'}
77
+ assert ($LOADED_FEATURES.grep(/file2.rb/)).length > 0
78
+ assert $LOADED_FEATURES.length == (@old_length + 1)
79
+ end
80
+
81
+ it "should save a file as a cache in a dir" do
82
+ assert Dir[FastRequire.dir + '/*'].length == 0 # all clear
83
+ FastRequire.default_save
84
+ assert Dir[FastRequire.dir + '/*'].length > 0
85
+ end
86
+
87
+ it "should have different caches based on the file being run, and Dir.pwd" do
88
+ # that wouldn't help much at all for ruby-prof runs, but...we do what we can
89
+ assert Dir[FastRequire.dir + '/*'].length == 0 # all clear
90
+ Dir.chdir('files') do
91
+ assert system("ruby -I../../lib d.rb")
92
+ assert system("ruby -I../../lib e.rb")
93
+ assert system("ruby -C.. -I../lib files/e.rb")
94
+ end
95
+ assert Dir[FastRequire.dir + '/*'].length == 3
96
+ assert Dir[FastRequire.dir + '/*spec_files_d*'].length == 1 # use full path
97
+ assert Dir[FastRequire.dir + '/*spec_files_e*'].length == 2 # different dirs
98
+ end
99
+
100
+ context "should work with ascii files well" do # most are binary, so...low prio
101
+ it "could cache the converted file, if that speeds things up"
102
+ end
103
+
104
+ private
105
+
106
+ def ruby filename
107
+ 3.times { assert system(@ruby + " " + filename) }
108
+ end
109
+
110
+ it "should override rubygems' require if rubygems is loaded after the fact...maybe by hooking to Gem::const_defined or something" do
111
+ ruby "files/gem_after.rb"
112
+ end
113
+
114
+ it "should override rubygems' require if rubygems is loaded before the fact" do
115
+ ruby "files/gem_before.rb"
116
+ end
117
+
118
+ it "should not double load gems" do
119
+ a = `#{@ruby} files/gem_after.rb 2>&1`
120
+ a.should_not match('already initialized')
121
+ end
122
+
123
+ it "should throw if you require it twice" do
124
+ Dir.chdir('files') do
125
+ assert !system(@ruby + 'attempt_double_load.rb')
126
+ end
127
+ end
128
+
129
+ it "should force require 'abc' to not load file called exactly abc" do
130
+ Dir.chdir('files') do
131
+ ruby 'require_non_dot_rb_fails.rb'
132
+ end
133
+ end
134
+
135
+ it "should handle full path requires" do
136
+ Dir.chdir('files') do
137
+ ruby 'require_full_path.rb'
138
+ end
139
+ end
140
+
141
+ it "should handle Pathname requires, too" do
142
+ require 'pathname'
143
+ require Pathname.new('pathname')
144
+ end
145
+
146
+ it "should work well with rubygems for gem libs (installed), themselves"
147
+
148
+ it "should disallow a file requiring itself" do
149
+ ruby 'files/requires_itself.rb'
150
+ ruby 'files/requires_itself.rb'
151
+ end
152
+
153
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: faster_require
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Roger Pack
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-29 00:00:00 -07:00
13
+ default_executable: fast_require
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: sane
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: ruby-prof
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ description:
46
+ email: rogerdpack@gmail.com
47
+ executables:
48
+ - fast_require
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - README
53
+ files:
54
+ - README
55
+ - Rakefile
56
+ - VERSION
57
+ - bin/fast_require
58
+ - lib/faster_require.rb
59
+ - lib/rubygems_plugin.rb
60
+ - spec/files/a_requires_b.rb
61
+ - spec/files/attempt_double_load.rb
62
+ - spec/files/b.rb
63
+ - spec/files/c.rb
64
+ - spec/files/d.rb
65
+ - spec/files/e.rb
66
+ - spec/files/fast.rb
67
+ - spec/files/gem_after.rb
68
+ - spec/files/gem_before.rb
69
+ - spec/files/large.rb
70
+ - spec/files/non_dot_rb.rb
71
+ - spec/files/require_full_path.rb
72
+ - spec/files/require_non_dot_rb_fails.rb
73
+ - spec/files/require_twice_in_dir_pwd.rb
74
+ - spec/files/requires_itself.rb
75
+ - spec/files/slow.rb
76
+ - spec/spec.fast_require.rb
77
+ has_rdoc: true
78
+ homepage: http://github.com/rdp/faster_require
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options:
83
+ - --charset=UTF-8
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "0"
97
+ version:
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.3.5
102
+ signing_key:
103
+ specification_version: 3
104
+ summary: A tool designed to speedup library loading in Ruby by caching library locations
105
+ test_files:
106
+ - spec/files/attempt_double_load.rb
107
+ - spec/files/a_requires_b.rb
108
+ - spec/files/b.rb
109
+ - spec/files/c.rb
110
+ - spec/files/d.rb
111
+ - spec/files/e.rb
112
+ - spec/files/fast.rb
113
+ - spec/files/gem_after.rb
114
+ - spec/files/gem_before.rb
115
+ - spec/files/large.rb
116
+ - spec/files/non_dot_rb.rb
117
+ - spec/files/requires_itself.rb
118
+ - spec/files/require_full_path.rb
119
+ - spec/files/require_non_dot_rb_fails.rb
120
+ - spec/files/require_twice_in_dir_pwd.rb
121
+ - spec/files/slow.rb
122
+ - spec/spec.fast_require.rb