Class: Gem::Resolver::APISet
| Relationships & Source Files | |
| Namespace Children | |
|
Classes:
| |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Set
|
|
|
Instance Chain:
self,
Set
|
|
| Inherits: |
Gem::Resolver::Set
|
| Defined in: | lib/rubygems/resolver/api_set.rb |
Overview
The global rubygems pool, available via the Compact Index API.
Returns instances of APISpecification.
Class Method Summary
-
.new(dep_uri = "https://index.rubygems.org/info/") ⇒ APISet
constructor
Creates a new
APISetthat will retrieve gems from #uri using the Compact Index API URL #dep_uri which is described at https://guides.rubygems.org/rubygems-org-compact-index-api.
Set - Inherited
Instance Attribute Summary
-
#source
readonly
The
::Gem::Sourcethat gems are fetched from. -
#uri
readonly
The corresponding place to fetch gems.
-
#dep_uri
readonly
Internal use only
The URI for the Compact Index API this
APISetuses.
Set - Inherited
| #errors | Errors encountered when resolving gems. |
| #prerelease | When true, allows matching of requests to prerelease gems. |
| #remote |
|
| #remote? | When true, this set is allowed to access the network when looking up specifications or dependencies. |
Instance Method Summary
-
#find_all(req)
Return an array of
APISpecificationobjects matchingDependencyRequestreq. -
#prefetch(reqs)
A hint run by the resolver to allow the
Setto fetch data for DependencyRequestsreqs. - #prefetch_now Internal use only
- #pretty_print(q) Internal use only
-
#versions(name)
Internal use only
Return data for all versions of the gem
name. - #client private Internal use only
Set - Inherited
Constructor Details
.new(dep_uri = "https://index.rubygems.org/info/") ⇒ APISet
Creates a new APISet that will retrieve gems from #uri using the Compact
Index API URL #dep_uri which is described at
https://guides.rubygems.org/rubygems-org-compact-index-api
# File 'lib/rubygems/resolver/api_set.rb', line 30
def initialize(dep_uri = "https://index.rubygems.org/info/") super() dep_uri = Gem::URI dep_uri unless Gem::URI === dep_uri @dep_uri = dep_uri @uri = dep_uri + ".." @client = nil @data = Hash.new {|h,k| h[k] = [] } @source = Gem::Source.new @uri @to_fetch = [] end
Instance Attribute Details
#dep_uri (readonly)
The URI for the Compact Index API this APISet uses.
# File 'lib/rubygems/resolver/api_set.rb', line 13
attr_reader :dep_uri # :nodoc:
#source (readonly)
The ::Gem::Source that gems are fetched from
# File 'lib/rubygems/resolver/api_set.rb', line 18
attr_reader :source
#uri (readonly)
The corresponding place to fetch gems.
# File 'lib/rubygems/resolver/api_set.rb', line 23
attr_reader :uri
Instance Method Details
#client (private)
# File 'lib/rubygems/resolver/api_set.rb', line 124
def client # :nodoc: @client ||= @source.compact_index_client end
#find_all(req)
Return an array of APISpecification objects matching
DependencyRequest req.
# File 'lib/rubygems/resolver/api_set.rb', line 49
def find_all(req) res = [] return res unless @remote if @to_fetch.include?(req.name) prefetch_now end versions(req.name).each do |ver| if req.dependency.match? req.name, ver[:number], @prerelease res << Gem::Resolver::APISpecification.new(self, ver) end end res end
#prefetch(reqs)
A hint run by the resolver to allow the Set to fetch
data for DependencyRequests reqs.
# File 'lib/rubygems/resolver/api_set.rb', line 71
def prefetch(reqs) return unless @remote names = reqs.map {|r| r.dependency.name } needed = names - @data.keys - @to_fetch @to_fetch += needed end
#prefetch_now
# File 'lib/rubygems/resolver/api_set.rb', line 79
def prefetch_now # :nodoc: needed = @to_fetch @to_fetch = [] needed.sort.each do |name| versions(name) end end
#pretty_print(q)
# File 'lib/rubygems/resolver/api_set.rb', line 88
def pretty_print(q) # :nodoc: q.group 2, "[APISet", "]" do q.breakable q.text "URI: #{@dep_uri}" q.breakable q.text "gem names:" q.pp @data.keys end end
#versions(name)
Return data for all versions of the gem name.
# File 'lib/rubygems/resolver/api_set.rb', line 102
def versions(name) # :nodoc: return @data[name] if @data.key?(name) infos = begin client.fetch_info(name) rescue Gem::RemoteFetcher::FetchError, Gem::CompactIndexClient::Error [] end infos.each do |_, number, platform, dependencies, requirements| platform ||= "ruby" dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] } requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h @data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements } end @data[name] end