Class: Gem::Resolver::BestSet
- Inherits:
-
ComposedSet
- Object
- Set
- ComposedSet
- Gem::Resolver::BestSet
- Defined in:
- lib/rubygems/resolver/best_set.rb
Overview
The BestSet chooses the best available method to query a remote index.
It combines IndexSet and APISet
Instance Attribute Summary
Attributes inherited from ComposedSet
Attributes inherited from Set
Instance Method Summary collapse
-
#find_all(req) ⇒ Object
:nodoc:.
-
#initialize(sources = Gem.sources) ⇒ BestSet
constructor
Creates a BestSet for the given
sources
or Gem::sources if none are specified. -
#pick_sets ⇒ Object
Picks which sets to use for the configured sources.
-
#prefetch(reqs) ⇒ Object
:nodoc:.
-
#pretty_print(q) ⇒ Object
:nodoc:.
-
#replace_failed_api_set(error) ⇒ Object
Replaces a failed APISet for the URI in
error
with an IndexSet.
Methods inherited from ComposedSet
#errors, #prerelease=, #remote=
Methods inherited from Set
Constructor Details
Instance Method Details
#find_all(req) ⇒ Object
:nodoc:
27 28 29 30 31 32 33 34 35 |
# File 'lib/rubygems/resolver/best_set.rb', line 27 def find_all(req) # :nodoc: pick_sets if @remote and @sets.empty? super rescue Gem::RemoteFetcher::FetchError => e replace_failed_api_set e retry end |
#pick_sets ⇒ Object
Picks which sets to use for the configured sources.
21 22 23 24 25 |
# File 'lib/rubygems/resolver/best_set.rb', line 21 def pick_sets # :nodoc: @sources.each_source do |source| @sets << source.dependency_resolver_set end end |
#prefetch(reqs) ⇒ Object
:nodoc:
37 38 39 40 41 |
# File 'lib/rubygems/resolver/best_set.rb', line 37 def prefetch(reqs) # :nodoc: pick_sets if @remote and @sets.empty? super end |
#pretty_print(q) ⇒ Object
:nodoc:
43 44 45 46 47 48 49 50 51 |
# File 'lib/rubygems/resolver/best_set.rb', line 43 def pretty_print(q) # :nodoc: q.group 2, '[BestSet', ']' do q.breakable q.text 'sets:' q.breakable q.pp @sets end end |
#replace_failed_api_set(error) ⇒ Object
Replaces a failed APISet for the URI in error
with an IndexSet.
If no matching APISet can be found the original error
is raised.
The calling method must retry the exception to repeat the lookup.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/rubygems/resolver/best_set.rb', line 60 def replace_failed_api_set(error) # :nodoc: uri = error.original_uri uri = URI uri unless URI === uri uri = uri + "." raise error unless api_set = @sets.find do |set| Gem::Resolver::APISet === set and set.dep_uri == uri end index_set = Gem::Resolver::IndexSet.new api_set.source @sets.map! do |set| next set unless set == api_set index_set end end |