In Files

  • rubygems/request_set.rb

Class/Module Index [+]

Quicksearch

Gem::RequestSet

Attributes

dependencies[R]

Public Class Methods

new(*deps) click to toggle source
 
               # File rubygems/request_set.rb, line 13
def initialize(*deps)
  @dependencies = deps

  yield self if block_given?
end
            

Public Instance Methods

gem(name, *reqs) click to toggle source

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
            
import(deps) click to toggle source

Add deps Gem::Depedency objects to the set.

 
               # File rubygems/request_set.rb, line 30
def import(deps)
  @dependencies += deps
end
            
install(options, &b) click to toggle source
 
               # 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
            
install_into(dir, force=true, &b) click to toggle source
 
               # 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_gemdeps(path) click to toggle source

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(set=nil) click to toggle source

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_current() click to toggle source

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
            
sorted_requests() click to toggle source
 
               # File rubygems/request_set.rb, line 81
def sorted_requests
  @sorted ||= strongly_connected_components.flatten
end
            
specs() click to toggle source
 
               # File rubygems/request_set.rb, line 57
def specs
  @specs ||= @requests.map { |r| r.full_spec }
end
            
specs_in(dir) click to toggle source
 
               # File rubygems/request_set.rb, line 85
def specs_in(dir)
  Dir["#{dir}/specifications/*.gemspec"].map do |g|
    Gem::Specification.load g
  end
end
            
tsort_each_child(node) click to toggle source
 
               # 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
            
tsort_each_node(&block) click to toggle source
 
               # File rubygems/request_set.rb, line 61
def tsort_each_node(&block)
  @requests.each(&block)
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 visit Documenting-ruby.org.

blog comments powered by Disqus