summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-05-01 11:49:31 -0600
committermo khan <mo.khan@gmail.com>2020-05-01 11:49:31 -0600
commitb42ee0bd6e67b8a9dff90891327ceba426b0190c (patch)
treeae00d9371d54a0665cb7934e0ffb83db632dbd10
parent896026c1720f9f5fd12314ff67e824ef51d4ffef (diff)
Update nuget cache builder to delegate to cache class
-rw-r--r--lib/spandx/core/cache.rb3
-rw-r--r--lib/spandx/dotnet/index.rb35
-rw-r--r--spec/integration/core/cache_spec.rb24
3 files changed, 33 insertions, 29 deletions
diff --git a/lib/spandx/core/cache.rb b/lib/spandx/core/cache.rb
index 1c965e2..06b3152 100644
--- a/lib/spandx/core/cache.rb
+++ b/lib/spandx/core/cache.rb
@@ -19,6 +19,9 @@ module Spandx
end
def insert(name, version, licenses)
+ return if name.nil? || name.empty?
+ return if version.nil? || version.empty?
+
open_file(datafile_for(name), mode: 'a') do |io|
io.write(CSV.generate_line(
[name, version, licenses.join('-|-')],
diff --git a/lib/spandx/dotnet/index.rb b/lib/spandx/dotnet/index.rb
index 9ad3c8b..415043a 100644
--- a/lib/spandx/dotnet/index.rb
+++ b/lib/spandx/dotnet/index.rb
@@ -4,25 +4,27 @@ module Spandx
module Dotnet
class Index
DEFAULT_DIR = File.expand_path(File.join(Dir.home, '.local', 'share', 'spandx'))
- attr_reader :directory, :name, :gateway
+ attr_reader :cache, :directory, :name, :gateway
def initialize(directory: DEFAULT_DIR, gateway: Spandx::Dotnet::NugetGateway.new)
@directory = directory ? File.expand_path(directory) : DEFAULT_DIR
@name = 'nuget'
@gateway = gateway
+ @cache = Spandx::Core::Cache.new(@name, root: directory)
end
def update!(*)
queue = Queue.new
[fetch(queue), save(queue)].each(&:join)
+ cache.rebuild_index
end
private
def fetch(queue)
Thread.new do
- gateway.each do |spec|
- queue.enq(spec)
+ gateway.each do |item|
+ queue.enq(item)
end
queue.enq(:stop)
end
@@ -34,35 +36,10 @@ module Spandx
item = queue.deq
break if item == :stop
- insert!(item['id'], item['version'], item['licenseExpression'])
+ cache.insert(item['id'], item['version'], [item['licenseExpression']])
end
end
end
-
- def digest_for(components)
- Digest::SHA1.hexdigest(Array(components).join('/'))
- end
-
- def data_dir_for(name)
- File.join(directory, digest_for(name)[0...2].downcase)
- end
-
- def data_file_for(name)
- File.join(data_dir_for(name), 'nuget')
- end
-
- def insert!(name, version, license)
- return if name.nil? || name.empty?
- return if version.nil? || version.empty?
-
- csv = CSV.generate_line([name, version, license], force_quotes: true)
- append(data_file_for(name), csv)
- end
-
- def append(path, data)
- FileUtils.mkdir_p(File.dirname(path))
- IO.write(path, data, mode: 'a')
- end
end
end
end
diff --git a/spec/integration/core/cache_spec.rb b/spec/integration/core/cache_spec.rb
index 6896134..116f3bb 100644
--- a/spec/integration/core/cache_spec.rb
+++ b/spec/integration/core/cache_spec.rb
@@ -46,6 +46,30 @@ RSpec.describe Spandx::Core::Cache do
specify { expect(subject.licenses_for(dependency_name, version)).to match_array(['MIT']) }
end
+
+ context "when attempting to insert invalid entries" do
+ specify do
+ subject.insert(nil, '1.1.1', ['MIT'])
+ expect(subject.licenses_for(nil, '1.1.1')).to be_empty
+ end
+
+ specify do
+ subject.insert('', '1.1.1', ['MIT'])
+ expect(subject.licenses_for('', '1.1.1')).to be_empty
+ end
+
+ specify do
+ subject.insert('spandx', nil, ['MIT'])
+ expect(subject.licenses_for(nil, '1.1.1')).to be_empty
+ expect(File.exist?(File.join(root_dir, 'cf'))).to be(false)
+ end
+
+ specify do
+ subject.insert('spandx', '', ['MIT'])
+ expect(subject.licenses_for('', '1.1.1')).to be_empty
+ expect(File.exist?(File.join(root_dir, 'cf'))).to be(false)
+ end
+ end
end
describe "#rebuild_index" do