Class: Gem::Resolver::APISet
- Defined in:
- lib/rubygems/resolver/api_set.rb
Overview
The global rubygems pool, available via the rubygems.org API. Returns instances of APISpecification.
Defined Under Namespace
Classes: GemParser
Instance Attribute Summary collapse
-
#dep_uri ⇒ Object
readonly
The URI for the dependency API this APISet uses.
-
#source ⇒ Object
readonly
The Gem::Source that gems are fetched from.
-
#uri ⇒ Object
readonly
The corresponding place to fetch gems.
Attributes inherited from Set
Instance Method Summary collapse
-
#find_all(req) ⇒ Object
Return an array of APISpecification objects matching DependencyRequest
req. -
#initialize(dep_uri = "https://index.rubygems.org/info/") ⇒ APISet
constructor
Creates a new APISet that will retrieve gems from
uriusing the RubyGems API URLdep_uriwhich is described at guides.rubygems.org/rubygems-org-api. -
#prefetch(reqs) ⇒ Object
A hint run by the resolver to allow the Set to fetch data for DependencyRequests
reqs. -
#prefetch_now ⇒ Object
:nodoc:.
-
#pretty_print(q) ⇒ Object
:nodoc:.
-
#versions(name) ⇒ Object
Return data for all versions of the gem
name.
Methods inherited from Set
Constructor Details
#initialize(dep_uri = "https://index.rubygems.org/info/") ⇒ APISet
Creates a new APISet that will retrieve gems from uri using the RubyGems API URL dep_uri which is described at guides.rubygems.org/rubygems-org-api
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# 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 + ".." @data = Hash.new {|h,k| h[k] = [] } @source = Gem::Source.new @uri @to_fetch = [] end |
Instance Attribute Details
#dep_uri ⇒ Object (readonly)
The URI for the dependency API this APISet uses.
13 14 15 |
# File 'lib/rubygems/resolver/api_set.rb', line 13 def dep_uri @dep_uri end |
#source ⇒ Object (readonly)
The Gem::Source that gems are fetched from
18 19 20 |
# File 'lib/rubygems/resolver/api_set.rb', line 18 def source @source end |
#uri ⇒ Object (readonly)
The corresponding place to fetch gems.
23 24 25 |
# File 'lib/rubygems/resolver/api_set.rb', line 23 def uri @uri end |
Instance Method Details
#find_all(req) ⇒ Object
Return an array of APISpecification objects matching DependencyRequest req.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rubygems/resolver/api_set.rb', line 48 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) ⇒ Object
A hint run by the resolver to allow the Set to fetch data for DependencyRequests reqs.
70 71 72 73 74 75 76 |
# File 'lib/rubygems/resolver/api_set.rb', line 70 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 ⇒ Object
:nodoc:
78 79 80 81 82 83 84 85 |
# File 'lib/rubygems/resolver/api_set.rb', line 78 def prefetch_now # :nodoc: needed = @to_fetch @to_fetch = [] needed.sort.each do |name| versions(name) end end |
#pretty_print(q) ⇒ Object
:nodoc:
87 88 89 90 91 92 93 94 95 96 |
# File 'lib/rubygems/resolver/api_set.rb', line 87 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) ⇒ Object
Return data for all versions of the gem name.
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/rubygems/resolver/api_set.rb', line 101 def versions(name) # :nodoc: if @data.key?(name) return @data[name] end uri = @dep_uri + name begin str = Gem::RemoteFetcher.fetcher.fetch_path uri rescue Gem::RemoteFetcher::FetchError @data[name] = [] else lines(str).each do |ver| number, platform, dependencies, requirements = parse_gem(ver) 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 end @data[name] end |