diff options
| author | mo khan <mo.khan@gmail.com> | 2020-05-01 11:49:31 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-05-01 11:49:31 -0600 |
| commit | b42ee0bd6e67b8a9dff90891327ceba426b0190c (patch) | |
| tree | ae00d9371d54a0665cb7934e0ffb83db632dbd10 | |
| parent | 896026c1720f9f5fd12314ff67e824ef51d4ffef (diff) | |
Update nuget cache builder to delegate to cache class
| -rw-r--r-- | lib/spandx/core/cache.rb | 3 | ||||
| -rw-r--r-- | lib/spandx/dotnet/index.rb | 35 | ||||
| -rw-r--r-- | spec/integration/core/cache_spec.rb | 24 |
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 |
