Class: Gem::DependencyResolver::APISet
- Inherits:
-
Object
- Object
- Gem::DependencyResolver::APISet
- Defined in:
- lib/rubygems/dependency_resolver.rb
Overview
The global rubygems pool, available via the rubygems.org API. Returns instances of APISpecification.
Instance Method Summary collapse
-
#find_all(req) ⇒ Object
Return an array of APISpecification objects matching DependencyRequest
req
. -
#initialize ⇒ APISet
constructor
A new instance of APISet.
-
#prefetch(reqs) ⇒ Object
A hint run by the resolver to allow the Set to fetch data for DependencyRequests
reqs
. -
#versions(name) ⇒ Object
Return data for all versions of the gem
name
.
Constructor Details
#initialize ⇒ APISet
Returns a new instance of APISet.
92 93 94 |
# File 'lib/rubygems/dependency_resolver.rb', line 92 def initialize @data = Hash.new { |h,k| h[k] = [] } end |
Instance Method Details
#find_all(req) ⇒ Object
Return an array of APISpecification objects matching DependencyRequest req
.
116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/rubygems/dependency_resolver.rb', line 116 def find_all(req) res = [] versions(req.name).each do |ver| if req.dependency.match? req.name, ver[:number] res << 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
.
131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/rubygems/dependency_resolver.rb', line 131 def prefetch(reqs) names = reqs.map { |r| r.dependency.name } needed = names.find_all { |d| !@data.key?(d) } return if needed.empty? u = URI.parse "http://rubygems.org/api/v1/dependencies?gems=#{needed.join ','}" str = Net::HTTP.get(u) Marshal.load(str).each do |ver| @data[ver[:name]] << ver end end |
#versions(name) ⇒ Object
Return data for all versions of the gem name
.
98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/rubygems/dependency_resolver.rb', line 98 def versions(name) if @data.key?(name) return @data[name] end u = URI.parse "http://rubygems.org/api/v1/dependencies?gems=#{name}" str = Net::HTTP.get(u) Marshal.load(str).each do |ver| @data[ver[:name]] << ver end @data[name] end |