Sha256: 8bee9fa900e0dfcaaa8633ef73265521fc43074be352497ed4e7bc634c443f41

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Spandx
  module Cli
    module Commands
      class Scan
        attr_reader :scan_path, :spinner

        def initialize(scan_path, options)
          @scan_path = ::Pathname.new(scan_path)
          @options = options
          @spinner = options[:show_progress] ? ::Spandx::Core::Spinner.new : ::Spandx::Core::Spinner::NULL
          require(options[:require]) if options[:require]
        end

        def execute(output: $stdout)
          report = ::Spandx::Core::Report.new
          each_file do |file|
            spinner.spin(file)
            each_dependency_from(file) do |dependency|
              spinner.spin(file)
              report.add(dependency)
            end
          end
          spinner.stop
          output.puts(format(report.to(@options[:format])))
        end

        private

        def each_file
          Spandx::Core::PathTraversal
            .new(scan_path, recursive: @options[:recursive])
            .each { |file| yield file }
        end

        def each_dependency_from(file)
          ::Spandx::Core::Parser
            .parse(file)
            .map { |x| enhance(x) }
            .each { |dependency| yield dependency }
        end

        def format(output)
          Array(output).map(&:to_s)
        end

        def enhance(dependency)
          ::Spandx::Core::Plugin
            .all
            .inject(dependency) { |memo, plugin| plugin.enhance(memo) }
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
spandx-0.13.4 lib/spandx/cli/commands/scan.rb