Class: Gem::Resolver::InstallerSet
- Defined in:
- lib/rubygems/resolver/installer_set.rb
Overview
A set of gems for installation sourced from remote sources and local .gem files
Instance Attribute Summary collapse
-
#always_install ⇒ Object
readonly
List of Gem::Specification objects that must always be installed.
-
#ignore_dependencies ⇒ Object
Only install gems in the always_install list.
-
#ignore_installed ⇒ Object
Do not look in the installed set when finding specifications.
Attributes inherited from Set
Instance Method Summary collapse
-
#consider_local? ⇒ Boolean
Should local gems should be considered?.
-
#consider_remote? ⇒ Boolean
Should remote gems should be considered?.
-
#find_all(req) ⇒ Object
Returns an array of IndexSpecification objects matching DependencyRequest
req
. -
#initialize(domain) ⇒ InstallerSet
constructor
Creates a new InstallerSet that will look for gems in
domain
. -
#inspect ⇒ Object
:nodoc:.
-
#load_spec(name, ver, platform, source) ⇒ Object
Called from IndexSpecification to get a true Specification object.
-
#pretty_print(q) ⇒ Object
:nodoc:.
-
#remote=(remote) ⇒ Object
:nodoc:.
Methods inherited from Set
Constructor Details
#initialize(domain) ⇒ InstallerSet
Creates a new InstallerSet that will look for gems in domain
.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/rubygems/resolver/installer_set.rb', line 26 def initialize domain super() @domain = domain @remote = consider_remote? @f = Gem::SpecFetcher.fetcher @always_install = [] @ignore_dependencies = false @ignore_installed = false @remote_set = Gem::Resolver::BestSet.new @specs = {} end |
Instance Attribute Details
#always_install ⇒ Object (readonly)
List of Gem::Specification objects that must always be installed.
10 11 12 |
# File 'lib/rubygems/resolver/installer_set.rb', line 10 def always_install @always_install end |
#ignore_dependencies ⇒ Object
Only install gems in the always_install list
15 16 17 |
# File 'lib/rubygems/resolver/installer_set.rb', line 15 def ignore_dependencies @ignore_dependencies end |
#ignore_installed ⇒ Object
Do not look in the installed set when finding specifications. This is used by the –install-dir option to ‘gem install`
21 22 23 |
# File 'lib/rubygems/resolver/installer_set.rb', line 21 def ignore_installed @ignore_installed end |
Instance Method Details
#consider_local? ⇒ Boolean
Should local gems should be considered?
44 45 46 |
# File 'lib/rubygems/resolver/installer_set.rb', line 44 def consider_local? # :nodoc: @domain == :both or @domain == :local end |
#consider_remote? ⇒ Boolean
Should remote gems should be considered?
51 52 53 |
# File 'lib/rubygems/resolver/installer_set.rb', line 51 def consider_remote? # :nodoc: @domain == :both or @domain == :remote end |
#find_all(req) ⇒ Object
Returns an array of IndexSpecification objects matching DependencyRequest req
.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/rubygems/resolver/installer_set.rb', line 59 def find_all req res = [] dep = req.dependency return res if @ignore_dependencies and @always_install.none? { |spec| dep.matches_spec? spec } name = dep.name dep.matching_specs.each do |gemspec| next if @always_install.include? gemspec res << Gem::Resolver::InstalledSpecification.new(self, gemspec) end unless @ignore_installed if consider_local? then local_source = Gem::Source::Local.new if spec = local_source.find_gem(name, dep.requirement) then res << Gem::Resolver::IndexSpecification.new( self, spec.name, spec.version, local_source, spec.platform) end end res.concat @remote_set.find_all req if consider_remote? res end |
#inspect ⇒ Object
:nodoc:
89 90 91 92 93 94 95 |
# File 'lib/rubygems/resolver/installer_set.rb', line 89 def inspect # :nodoc: always_install = @always_install.map { |s| s.full_name } '#<%s domain: %s specs: %p always install: %p>' % [ self.class, @domain, @specs.keys, always_install, ] end |
#load_spec(name, ver, platform, source) ⇒ Object
Called from IndexSpecification to get a true Specification object.
101 102 103 104 105 106 107 108 109 |
# File 'lib/rubygems/resolver/installer_set.rb', line 101 def load_spec name, ver, platform, source # :nodoc: key = "#{name}-#{ver}-#{platform}" @specs.fetch key do tuple = Gem::NameTuple.new name, ver, platform @specs[key] = source.fetch_spec tuple end end |
#pretty_print(q) ⇒ Object
:nodoc:
111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/rubygems/resolver/installer_set.rb', line 111 def pretty_print q # :nodoc: q.group 2, '[InstallerSet', ']' do q.breakable q.text "domain: #{@domain}" q.breakable q.text 'specs: ' q.pp @specs.keys q.breakable q.text 'always install: ' q.pp @always_install end end |
#remote=(remote) ⇒ Object
:nodoc:
126 127 128 129 130 131 132 133 134 135 |
# File 'lib/rubygems/resolver/installer_set.rb', line 126 def remote= remote # :nodoc: case @domain when :local then @domain = :both if remote when :remote then @domain = nil unless remote when :both then @domain = :local unless remote end end |