GemPathSearcher has the capability to find loadable files inside gems. It generates data up front to speed up searches later.
- F
- I
- L
- M
- N
Initialise the data we need to make searches later.
# File ../ruby/lib/rubygems/gem_path_searcher.rb, line 13 def initialize # We want a record of all the installed gemspecs, in the order we wish to # examine them. # TODO: remove this stupid method @gemspecs = init_gemspecs # Map gem spec to glob of full require_path directories. Preparing this # information may speed up searches later. @lib_dirs = {} @gemspecs.each do |spec| @lib_dirs[spec.object_id] = lib_dirs_for spec end end
Look in all the installed gems until a matching glob
is found.
Return the gemspec of the gem where it was found. If no match is
found, return nil.
The gems are searched in alphabetical order, and in reverse version order.
For example:
find('log4r') # -> (log4r-1.1 spec)
find('log4r.rb') # -> (log4r-1.1 spec)
find('rake/rdoctask') # -> (rake-0.4.12 spec)
find('foobarbaz') # -> nil
Matching paths can have various suffixes ('.rb', '.so', and others), which may or may not already be attached to file. This method doesn't care about the full filename that matches; only that there is a match.
# File ../ruby/lib/rubygems/gem_path_searcher.rb, line 84 def find_in_unresolved(glob) # HACK violation specs = Gem.unresolved_deps.values.map { |dep| Gem.source_index.search dep, true }.flatten specs.select do |spec| # TODO: inverted responsibility matching_file? spec, glob end || [] end
# File ../ruby/lib/rubygems/gem_path_searcher.rb, line 96 def find_in_unresolved_tree glob # HACK violation # TODO: inverted responsibility specs = Gem.unresolved_deps.values.map { |dep| Gem.source_index.search dep, true }.flatten specs.reverse_each do |spec| trails = matching_paths(spec, glob) next if trails.empty? return trails.map(&:reverse).sort.first.reverse end [] end
Looks through the available gemspecs and finds the first one that contains
file
as a requirable file.
Return a list of all installed gemspecs, sorted by alphabetical order and in reverse version order. (bar-2, bar-1, foo-2)
Returns library directories glob for a gemspec. For example,
'/usr/local/lib/ruby/gems/1.8/gems/foobar-1.0/{lib,ext}'
Attempts to find a matching path using the require_paths of the given
spec
.
Returns files matching path
in spec
.