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.
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.
Instance Method Summary collapse
-
#find_all(req) ⇒ Object
Return an array of APISpecification objects matching DependencyRequest
req. -
#initialize(dep_uri = 'https://rubygems.org/api/v1/dependencies') ⇒ 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. -
#pretty_print(q) ⇒ Object
:nodoc:.
-
#versions(name) ⇒ Object
Return data for all versions of the gem
name.
Constructor Details
#initialize(dep_uri = 'https://rubygems.org/api/v1/dependencies') ⇒ 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
27 28 29 30 31 32 33 34 35 |
# File 'lib/rubygems/resolver/api_set.rb', line 27 def initialize dep_uri = 'https://rubygems.org/api/v1/dependencies' dep_uri = URI dep_uri unless URI === dep_uri # for ruby 1.8 @dep_uri = dep_uri @uri = dep_uri + '../../..' @data = Hash.new { |h,k| h[k] = [] } @source = Gem::Source.new @uri end |
Instance Attribute Details
#dep_uri ⇒ Object (readonly)
The URI for the dependency API this APISet uses.
10 11 12 |
# File 'lib/rubygems/resolver/api_set.rb', line 10 def dep_uri @dep_uri end |
#source ⇒ Object (readonly)
The Gem::Source that gems are fetched from
15 16 17 |
# File 'lib/rubygems/resolver/api_set.rb', line 15 def source @source end |
#uri ⇒ Object (readonly)
The corresponding place to fetch gems.
20 21 22 |
# File 'lib/rubygems/resolver/api_set.rb', line 20 def uri @uri end |
Instance Method Details
#find_all(req) ⇒ Object
Return an array of APISpecification objects matching DependencyRequest req.
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/rubygems/resolver/api_set.rb', line 41 def find_all req res = [] versions(req.name).each do |ver| if req.dependency.match? req.name, ver[:number] 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.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/rubygems/resolver/api_set.rb', line 57 def prefetch reqs names = reqs.map { |r| r.dependency.name } needed = names - @data.keys return if needed.empty? uri = @dep_uri + "?gems=#{needed.sort.join ','}" str = Gem::RemoteFetcher.fetcher.fetch_path uri loaded = [] Marshal.load(str).each do |ver| name = ver[:name] @data[name] << ver loaded << name end (needed - loaded).each do |missing| @data[missing] = [] end end |
#pretty_print(q) ⇒ Object
:nodoc:
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/rubygems/resolver/api_set.rb', line 80 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.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/rubygems/resolver/api_set.rb', line 94 def versions name # :nodoc: if @data.key?(name) return @data[name] end uri = @dep_uri + "?gems=#{name}" str = Gem::RemoteFetcher.fetcher.fetch_path uri Marshal.load(str).each do |ver| @data[ver[:name]] << ver end @data[name] end |