summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-12-25 14:53:56 -0700
committermo khan <mo.khan@gmail.com>2020-12-25 14:53:56 -0700
commit6a03a01afea22bb46ed9da3c1b7889378e9dd13d (patch)
treed34544003e1ad4657ab8bd7710253e727c66dfb6 /lib
parenta18f47bae6e509ec75d8bcdff5157d80d928ece0 (diff)
feat: parse rubygems index
Diffstat (limited to 'lib')
-rw-r--r--lib/spandx/ruby/gateway.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/spandx/ruby/gateway.rb b/lib/spandx/ruby/gateway.rb
index 208eb9e..fd506f4 100644
--- a/lib/spandx/ruby/gateway.rb
+++ b/lib/spandx/ruby/gateway.rb
@@ -8,6 +8,15 @@ module Spandx
@http = http
end
+ def each
+ response = http.get('https://index.rubygems.org/versions')
+ return unless http.ok?(response)
+
+ parse_each_from(StringIO.new(response.body)) do |item|
+ yield item
+ end
+ end
+
def licenses_for(dependency)
details_on(dependency.name, dependency.version)['licenses'] || []
end
@@ -20,6 +29,17 @@ module Spandx
attr_reader :http
+ def parse_each_from(io)
+ _created_at = io.readline
+ _triple_dash = io.readline
+ until io.eof?
+ name, versions, digest = io.readline.split(' ')
+ versions.split(',').each do |version|
+ yield({ name: name, version: version })
+ end
+ end
+ end
+
def details_on(name, version)
url = "https://rubygems.org/api/v2/rubygems/#{name}/versions/#{version}.json"
response = http.get(url, default: {})