lib/spandx/gateways/nuget.rb in spandx-0.1.7 vs lib/spandx/gateways/nuget.rb in spandx-0.2.0
- old
+ new
@@ -7,44 +7,52 @@
# https://docs.microsoft.com/en-us/nuget/api/package-base-address-resource
class Nuget
def initialize(http: Spandx.http, catalogue:)
@http = http
@catalogue = catalogue
+ @guess = Guess.new(catalogue)
end
def licenses_for(name, version)
document = nuspec_for(name, version)
- exact_licenses_from(document) ||
+ extract_licenses_from(document) ||
guess_licenses_from(document)
end
private
- attr_reader :http, :catalogue
+ attr_reader :http, :catalogue, :guess
def nuspec_url_for(name, version)
"https://api.nuget.org/v3-flatcontainer/#{name}/#{version}/#{name}.nuspec"
end
def nuspec_for(name, version)
- from_xml(http.get(nuspec_url_for(name, version)).body)
+ response = http.get(nuspec_url_for(name, version))
+ from_xml(response.body) if http.ok?(response)
end
def from_xml(xml)
Nokogiri::XML(xml).tap(&:remove_namespaces!)
end
- def exact_licenses_from(document)
+ def extract_licenses_from(document)
licenses = document.search('//package/metadata/license')
licenses.map(&:text) if licenses.any?
end
def guess_licenses_from(document)
- guess = Guess.new(catalogue)
document
.search('//package/metadata/licenseUrl')
- .map { |node| guess.license_for(http.get(node.text).body) }
+ .map { |node| guess_license_for(node.text) }
+ .compact
+ end
+
+ def guess_license_for(url)
+ response = http.get(url)
+
+ guess.license_for(response.body) if http.ok?(response)
end
end
end
end