Declare that a gem of name name with reqs
requirements is needed.
# File rubygems/request_set.rb, line 24
def gem(name, *reqs)
@dependencies << Gem::Dependency.new(name, reqs)
end
Add deps Gem::Depedency objects to the set.
# File rubygems/request_set.rb, line 30
def import(deps)
@dependencies += deps
end
# File rubygems/request_set.rb, line 119
def install(options, &b)
if dir = options[:install_dir]
return install_into(dir, false, &b)
end
cache_dir = options[:cache_dir] || Gem.dir
specs = []
sorted_requests.each do |req|
if req.installed?
b.call req, nil if b
next
end
path = req.download cache_dir
inst = Gem::Installer.new path, options
b.call req, inst if b
specs << inst.install
end
specs
end
# File rubygems/request_set.rb, line 91
def install_into(dir, force=true, &b)
existing = force ? [] : specs_in(dir)
dir = File.expand_path dir
installed = []
sorted_requests.each do |req|
if existing.find { |s| s.full_name == req.spec.full_name }
b.call req, nil if b
next
end
path = req.download(dir)
inst = Gem::Installer.new path, :install_dir => dir,
:only_install_dir => true
b.call req, inst if b
inst.install
installed << req
end
installed
end
Load a dependency management file.
# File rubygems/request_set.rb, line 52
def load_gemdeps(path)
gf = GemDepedencyAPI.new(self, path)
gf.load
end
Resolve the requested dependencies and return an Array of Specification objects to be activated.
# File rubygems/request_set.rb, line 37
def resolve(set=nil)
r = Gem::DependencyResolver.new(@dependencies, set)
@requests = r.resolve
end
Resolve the requested dependencies against the gems available via Gem.path and return an Array of Specification objects to be activated.
# File rubygems/request_set.rb, line 46
def resolve_current
resolve DependencyResolver::CurrentSet.new
end
# File rubygems/request_set.rb, line 81
def sorted_requests
@sorted ||= strongly_connected_components.flatten
end
# File rubygems/request_set.rb, line 57
def specs
@specs ||= @requests.map { |r| r.full_spec }
end
# File rubygems/request_set.rb, line 85
def specs_in(dir)
Dir["#{dir}/specifications/*.gemspec"].map do |g|
Gem::Specification.load g
end
end
# File rubygems/request_set.rb, line 65
def tsort_each_child(node)
node.spec.dependencies.each do |dep|
next if dep.type == :development
match = @requests.find { |r| dep.match? r.spec.name, r.spec.version }
if match
begin
yield match
rescue TSort::Cyclic
end
else
raise Gem::DependencyError, "Unresolved depedency found during sorting - #{dep}"
end
end
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.