Sha256: a3b054ab0e3c579a2a8eb655a038538b0ecba64bc3b07198b65c8a6cf22ba268

Contents?: true

Size: 1.44 KB

Versions: 8

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module Spandx
  module Core
    class DataFile
      include Enumerable

      attr_reader :absolute_path

      def initialize(absolute_path)
        @absolute_path = Pathname.new(absolute_path)
        FileUtils.mkdir_p(@absolute_path.dirname)
      end

      def each
        return unless exist?

        open_file(mode: 'rb') do |io|
          while (line = io.gets)
            yield CsvParser.parse(line)
          end
        end
      end

      def search(name:, version:)
        return if name.nil? || name.empty?
        return if version.nil? || name.empty?
        return unless absolute_path.exist?

        term = "#{name}-#{version}"
        index.search do |row|
          term <=> "#{row[0]}-#{row[1]}"
        end
      end

      def insert(name, version, licenses)
        return if [name, version].any? { |x| x.nil? || x.empty? }

        open_file(mode: 'a') do |io|
          io.write(to_csv([name, version, licenses.join('-|-')]))
        end
      end

      def exist?
        absolute_path.exist?
      end

      def open_file(mode: 'rb')
        absolute_path.open(mode) { |io| yield io }
      rescue Errno::ENOENT => error
        Spandx.logger.error(error)
        nil
      end

      def index
        @index ||= IndexFile.new(self)
      end

      def to_s
        absolute_path.to_s
      end

      private

      def to_csv(array)
        array.to_csv(force_quotes: true)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
spandx-0.19.0 lib/spandx/core/data_file.rb
spandx-0.18.3 lib/spandx/core/data_file.rb
spandx-0.18.2 lib/spandx/core/data_file.rb
spandx-0.18.1 lib/spandx/core/data_file.rb
spandx-0.18.0 lib/spandx/core/data_file.rb
spandx-0.17.0 lib/spandx/core/data_file.rb
spandx-0.16.1 lib/spandx/core/data_file.rb
spandx-0.16.0 lib/spandx/core/data_file.rb