Sha256: e119efb1b97065f5ff4808c8b2af91d0d43283aa4c749bf9126305e9190c2399

Contents?: true

Size: 1.28 KB

Versions: 6

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

module Spandx
  module Parsers
    class PipfileLock < ::Spandx::Core::Parser
      def self.matches?(filename)
        filename.match?(/Pipfile.*\.lock/)
      end

      def parse(lockfile)
        results = []
        dependencies_from(lockfile) do |x|
          results << ::Spandx::Core::Dependency.new(
            name: x[:name],
            version: x[:version],
            licenses: x[:licenses]
          )
        end
        results
      end

      private

      def dependencies_from(lockfile)
        json = JSON.parse(IO.read(lockfile))
        each_dependency(pypi_for(json), json) do |name, version, definition|
          yield({ name: name, version: version, licenses: [catalogue[definition['license']]] })
        end
      end

      def each_dependency(pypi, json, groups: %w[default develop])
        groups.each do |group|
          json[group].each do |name, value|
            version = canonicalize(value['version'])
            yield name, version, pypi.definition_for(name, version)
          end
        end
      end

      def canonicalize(version)
        version.gsub(/==/, '')
      end

      def pypi_for(json)
        Gateways::PyPI.new(
          sources: Gateways::PyPI::Source.sources_from(json)
        )
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
spandx-0.10.1 lib/spandx/parsers/pipfile_lock.rb
spandx-0.10.0 lib/spandx/parsers/pipfile_lock.rb
spandx-0.9.0 lib/spandx/parsers/pipfile_lock.rb
spandx-0.8.0 lib/spandx/parsers/pipfile_lock.rb
spandx-0.7.0 lib/spandx/parsers/pipfile_lock.rb
spandx-0.6.0 lib/spandx/parsers/pipfile_lock.rb