Sha256: a9ca5ed0bcaa740af1326734f7b7849d3cc7c2950afa026ad1a3111ae9793c46

Contents?: true

Size: 1.44 KB

Versions: 46

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module LicenseFinder
  class Diff
    class << self
      def compare(file1, file2)
        p1 = Set.new(build_packages(file1))
        p2 = Set.new(build_packages(file2))

        added = p2.difference(p1).to_a
        removed = p1.difference(p2).to_a
        unchanged = p1.intersection(p2).to_a

        [].tap do |packages|
          unchanged.each do |package|
            package_previous = find_package(p1, package)
            package_current = find_package(p2, package)

            if package_current.licenses == package_previous.licenses
              packages << PackageDelta.unchanged(package_current, package_previous)
            else
              packages << PackageDelta.removed(package_previous)
              packages << PackageDelta.added(package_current)
            end
          end

          added.each    { |package| packages << PackageDelta.added(package) }
          removed.each  { |package| packages << PackageDelta.removed(package) }
        end
      end

      private

      def build_packages(content)
        CSV.parse(content).map do |row|
          row.map!(&:strip)
          package = Package.new(row[0], row[1], spec_licenses: [row[2]])
          if row.count == 4
            MergedPackage.new(package, row[3].split(','))
          else
            package
          end
        end
      end

      def find_package(set, package)
        set.find { |p| p.eql? package }
      end
    end
  end
end

Version data entries

46 entries across 46 versions & 2 rubygems

Version Path
license_finder-7.1.0 lib/license_finder/diff.rb
license_finder-7.0.1 lib/license_finder/diff.rb
license_finder-7.0.0 lib/license_finder/diff.rb
license_finder-6.15.0 lib/license_finder/diff.rb
gitlab-license_finder-6.14.2.1 lib/license_finder/diff.rb
license_finder-6.14.2 lib/license_finder/diff.rb
license_finder-6.14.1 lib/license_finder/diff.rb
license_finder-6.13.0 lib/license_finder/diff.rb
license_finder-6.12.2 lib/license_finder/diff.rb
license_finder-6.12.1 lib/license_finder/diff.rb
license_finder-6.12.0 lib/license_finder/diff.rb
license_finder-6.11.0 lib/license_finder/diff.rb
license_finder-6.10.1 lib/license_finder/diff.rb
license_finder-6.10.0 lib/license_finder/diff.rb
license_finder-6.9.0 lib/license_finder/diff.rb
license_finder-6.8.2 lib/license_finder/diff.rb
license_finder-6.8.1 lib/license_finder/diff.rb
license_finder-6.8.0 lib/license_finder/diff.rb
license_finder-6.7.0 lib/license_finder/diff.rb
license_finder-6.6.2 lib/license_finder/diff.rb