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