Class: Gem::Resolver::VendorSet

Inherits:
Set
  • Object
show all
Defined in:
lib/rubygems/resolver/vendor_set.rb

Overview

A VendorSet represents gems that have been unpacked into a specific directory that contains a gemspec.

This is used for gem dependency file support.

Example:

set = Gem::Resolver::VendorSet.new

set.add_vendor_gem 'rake', 'vendor/rake'

The directory vendor/rake must contain an unpacked rake gem along with a rake.gemspec (watching the given name).

Instance Attribute Summary collapse

Attributes inherited from Set

#remote

Instance Method Summary collapse

Methods inherited from Set

#prefetch, #remote?

Constructor Details

#initializeVendorSet

:nodoc:



23
24
25
26
27
28
# File 'lib/rubygems/resolver/vendor_set.rb', line 23

def initialize # :nodoc:
  super()

  @directories = {}
  @specs       = {}
end

Instance Attribute Details

#specsObject (readonly)

The specifications for this set.



21
22
23
# File 'lib/rubygems/resolver/vendor_set.rb', line 21

def specs
  @specs
end

Instance Method Details

#add_vendor_gem(name, directory) ⇒ Object

Adds a specification to the set with the given name which has been unpacked into the given directory.



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/rubygems/resolver/vendor_set.rb', line 34

def add_vendor_gem name, directory # :nodoc:
  gemspec = File.join directory, "#{name}.gemspec"

  spec = Gem::Specification.load gemspec

  raise Gem::GemNotFoundException,
        "unable to find #{gemspec} for gem #{name}" unless spec

  spec.full_gem_path = File.expand_path directory

  @specs[spec.name]  = spec
  @directories[spec] = directory
end

#find_all(req) ⇒ Object

Returns an Array of VendorSpecification objects matching the DependencyRequest req.



52
53
54
55
56
57
58
59
# File 'lib/rubygems/resolver/vendor_set.rb', line 52

def find_all req
  @specs.values.select do |spec|
    req.matches_spec? spec
  end.map do |spec|
    source = Gem::Source::Vendor.new @directories[spec]
    Gem::Resolver::VendorSpecification.new self, spec, source
  end
end

#load_spec(name, version, platform, source) ⇒ Object

Loads a spec with the given name. version, platform and source are ignored.



65
66
67
# File 'lib/rubygems/resolver/vendor_set.rb', line 65

def load_spec name, version, platform, source # :nodoc:
  @specs.fetch name
end

#pretty_print(q) ⇒ Object

:nodoc:



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/rubygems/resolver/vendor_set.rb', line 69

def pretty_print q # :nodoc:
  q.group 2, '[VendorSet', ']' do
    next if @directories.empty?
    q.breakable

    dirs = @directories.map do |spec, directory|
      "#{spec.full_name}: #{directory}"
    end

    q.seplist dirs do |dir|
      q.text dir
    end
  end
end