license_finder 0.9.4-java → 0.9.5-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +0 -7
- data/.travis.yml +1 -3
- data/CHANGELOG.rdoc +13 -0
- data/db/migrate/201307251004_data_fix_manual_licenses.rb +2 -2
- data/db/migrate/201307251107_reassociate_license.rb +18 -18
- data/db/migrate/201311192002_add_manually_approved_to_dependencies.rb +7 -0
- data/db/migrate/201311192003_reassociate_manual_approval.rb +14 -0
- data/db/migrate/201311192010_drop_approvals.rb +5 -0
- data/features/cli.feature +1 -1
- data/features/html_report.feature +1 -1
- data/features/{non_bundler_dependencies.feature → manually_managed_dependencies.feature} +6 -6
- data/features/step_definitions/html_report_steps.rb +2 -9
- data/features/step_definitions/{non_bundler_steps.rb → manually_managed_steps.rb} +0 -0
- data/features/step_definitions/shared_steps.rb +4 -8
- data/lib/license_finder.rb +21 -17
- data/lib/license_finder/bower.rb +3 -34
- data/lib/license_finder/bower_package.rb +63 -0
- data/lib/license_finder/bundler.rb +73 -0
- data/lib/license_finder/bundler_package.rb +33 -0
- data/lib/license_finder/cli.rb +33 -35
- data/lib/license_finder/dependency_manager.rb +14 -23
- data/lib/license_finder/license/apache2.rb +1 -1
- data/lib/license_finder/license/lgpl.rb +1 -0
- data/lib/license_finder/npm.rb +22 -39
- data/lib/license_finder/npm_package.rb +61 -0
- data/lib/license_finder/package.rb +14 -80
- data/lib/license_finder/package_saver.rb +13 -75
- data/lib/license_finder/pip.rb +21 -33
- data/lib/license_finder/pip_package.rb +51 -0
- data/lib/license_finder/platform.rb +3 -15
- data/lib/license_finder/possible_license_file.rb +0 -4
- data/lib/license_finder/possible_license_files.rb +4 -0
- data/lib/license_finder/tables.rb +2 -2
- data/lib/license_finder/tables/bundler_group.rb +3 -0
- data/lib/license_finder/tables/dependency.rb +43 -18
- data/lib/license_finder/tables/license_alias.rb +4 -0
- data/lib/license_finder/yml_to_sql.rb +22 -30
- data/license_finder.gemspec +3 -3
- data/readme.md +5 -5
- data/spec/lib/license_finder/bower_package_spec.rb +56 -0
- data/spec/lib/license_finder/bower_spec.rb +3 -24
- data/spec/lib/license_finder/bundler_package_spec.rb +62 -0
- data/spec/lib/license_finder/{bundle_spec.rb → bundler_spec.rb} +7 -7
- data/spec/lib/license_finder/cli_spec.rb +6 -6
- data/spec/lib/license_finder/dependency_manager_spec.rb +14 -15
- data/spec/lib/license_finder/html_report_spec.rb +2 -3
- data/spec/lib/license_finder/markdown_report_spec.rb +4 -4
- data/spec/lib/license_finder/npm_package_spec.rb +51 -0
- data/spec/lib/license_finder/npm_spec.rb +25 -25
- data/spec/lib/license_finder/package_saver_spec.rb +50 -190
- data/spec/lib/license_finder/pip_package_spec.rb +74 -0
- data/spec/lib/license_finder/pip_spec.rb +33 -55
- data/spec/lib/license_finder/tables/dependency_spec.rb +83 -32
- data/spec/lib/license_finder/yml_to_sql_spec.rb +5 -12
- data/spec/spec_helper.rb +22 -2
- metadata +30 -18
- data/lib/license_finder/bundle.rb +0 -74
- data/lib/license_finder/tables/approval.rb +0 -4
- data/spec/lib/license_finder/package_spec.rb +0 -98
| @@ -3,19 +3,13 @@ require 'forwardable' | |
| 3 3 | 
             
            module LicenseFinder
         | 
| 4 4 | 
             
              class PackageSaver
         | 
| 5 5 | 
             
                extend Forwardable
         | 
| 6 | 
            -
                def_delegators : | 
| 7 | 
            -
                def_delegators :package, :bundler_dependency, :license, :children, :groups, :summary, :description
         | 
| 6 | 
            +
                def_delegators :package, :license, :children, :groups, :summary, :description, :version, :homepage
         | 
| 8 7 |  | 
| 9 8 | 
             
                attr_reader :dependency, :package
         | 
| 10 9 |  | 
| 11 | 
            -
                def self. | 
| 12 | 
            -
                   | 
| 13 | 
            -
             | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                def self.save_packages(current_packages)
         | 
| 17 | 
            -
                  current_packages.map do |package|
         | 
| 18 | 
            -
                    PackageSaver.find_or_create_by_name(package).save
         | 
| 10 | 
            +
                def self.save_all(packages)
         | 
| 11 | 
            +
                  packages.map do |package|
         | 
| 12 | 
            +
                    find_or_create_by_name(package).save
         | 
| 19 13 | 
             
                  end
         | 
| 20 14 | 
             
                end
         | 
| 21 15 |  | 
| @@ -26,79 +20,23 @@ module LicenseFinder | |
| 26 20 |  | 
| 27 21 | 
             
                def save
         | 
| 28 22 | 
             
                  DB.transaction do
         | 
| 29 | 
            -
                    apply_dependency_definition
         | 
| 30 | 
            -
                    sync_bundler_groups
         | 
| 31 | 
            -
                    sync_children
         | 
| 32 | 
            -
                    apply_better_license
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
                  dependency
         | 
| 35 | 
            -
                end
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                private
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                def spec
         | 
| 40 | 
            -
                  package.spec
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                def apply_dependency_definition
         | 
| 44 | 
            -
                  if values_have_changed?
         | 
| 45 23 | 
             
                    dependency.version = version.to_s
         | 
| 46 24 | 
             
                    dependency.summary = summary
         | 
| 47 25 | 
             
                    dependency.description = description
         | 
| 48 26 | 
             
                    dependency.homepage = homepage
         | 
| 49 | 
            -
                    dependency. | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
                def values_have_changed?
         | 
| 54 | 
            -
                  return dependency.version != version.to_s ||
         | 
| 55 | 
            -
                    dependency.summary != summary ||
         | 
| 56 | 
            -
                    dependency.description != description ||
         | 
| 57 | 
            -
                    dependency.homepage != homepage
         | 
| 58 | 
            -
                end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                def sync_bundler_groups
         | 
| 61 | 
            -
                  existing_groups = dependency.bundler_groups
         | 
| 62 | 
            -
                  new_groups = groups.map(&:to_s)
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                  existing_groups.reverse.each do |group|
         | 
| 65 | 
            -
                    unless new_groups.include?(group.name)
         | 
| 66 | 
            -
                      dependency.remove_bundler_group(group)
         | 
| 67 | 
            -
                    end
         | 
| 68 | 
            -
                  end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                  new_groups.each do |group|
         | 
| 71 | 
            -
                    unless existing_groups.map(&:name).include? group
         | 
| 72 | 
            -
                      dependency.add_bundler_group BundlerGroup.find_or_create(name: group)
         | 
| 73 | 
            -
                    end
         | 
| 27 | 
            +
                    dependency.bundler_group_names = groups.map(&:to_s)
         | 
| 28 | 
            +
                    dependency.children_names = children
         | 
| 29 | 
            +
                    dependency.apply_better_license license
         | 
| 30 | 
            +
                    dependency.save_changes
         | 
| 74 31 | 
             
                  end
         | 
| 32 | 
            +
                  dependency
         | 
| 75 33 | 
             
                end
         | 
| 76 34 |  | 
| 77 | 
            -
                 | 
| 78 | 
            -
                  existing_children = dependency.children
         | 
| 79 | 
            -
                  new_children = children
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                  existing_children.reverse.each do |child|
         | 
| 82 | 
            -
                    unless new_children.include?(child.name)
         | 
| 83 | 
            -
                      dependency.remove_child(child)
         | 
| 84 | 
            -
                    end
         | 
| 85 | 
            -
                  end
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                  new_children.each do |child|
         | 
| 88 | 
            -
                    unless existing_children.map(&:name).include?(child)
         | 
| 89 | 
            -
                      dependency.add_child Dependency.named(child)
         | 
| 90 | 
            -
                    end
         | 
| 91 | 
            -
                  end
         | 
| 92 | 
            -
                end
         | 
| 35 | 
            +
                private
         | 
| 93 36 |  | 
| 94 | 
            -
                def  | 
| 95 | 
            -
                   | 
| 96 | 
            -
             | 
| 97 | 
            -
                    if dependency.license.nil? || bundled_license != dependency.license.name
         | 
| 98 | 
            -
                      dependency.license = LicenseAlias.find_or_create(name: bundled_license)
         | 
| 99 | 
            -
                      dependency.save
         | 
| 100 | 
            -
                    end
         | 
| 101 | 
            -
                  end
         | 
| 37 | 
            +
                def self.find_or_create_by_name(package)
         | 
| 38 | 
            +
                  dependency = Dependency.named(package.name)
         | 
| 39 | 
            +
                  new(dependency, package)
         | 
| 102 40 | 
             
                end
         | 
| 103 41 | 
             
              end
         | 
| 104 42 | 
             
            end
         | 
    
        data/lib/license_finder/pip.rb
    CHANGED
    
    | @@ -1,10 +1,9 @@ | |
| 1 1 | 
             
            require 'json'
         | 
| 2 2 | 
             
            require 'httparty'
         | 
| 3 | 
            -
            require 'license_finder/package'
         | 
| 4 3 |  | 
| 5 4 | 
             
            module LicenseFinder
         | 
| 6 5 | 
             
              class Pip
         | 
| 7 | 
            -
                GET_DEPENDENCIES_PY = <<-PYTHON
         | 
| 6 | 
            +
                GET_DEPENDENCIES_PY = <<-PYTHON.gsub(/\n+/, ";")
         | 
| 8 7 | 
             
            from pip.util import get_installed_distributions
         | 
| 9 8 |  | 
| 10 9 | 
             
            dists = [(x.project_name, x.version, x.location) for x in get_installed_distributions()]
         | 
| @@ -13,47 +12,36 @@ dists = ["[\\\"{0}\\\", \\\"{1}\\\", \\\"{2}\\\"]".format(*dist) for dist in dis | |
| 13 12 | 
             
            print "[" + ",".join(dists) + "]"
         | 
| 14 13 | 
             
                PYTHON
         | 
| 15 14 |  | 
| 16 | 
            -
                def self. | 
| 17 | 
            -
                   | 
| 15 | 
            +
                def self.current_packages
         | 
| 16 | 
            +
                  output = `python -c '#{GET_DEPENDENCIES_PY}'`
         | 
| 18 17 |  | 
| 19 | 
            -
                   | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                      :version => dist_ary[1],
         | 
| 27 | 
            -
                      :full_gem_path => File.join(dist_ary[2], dist_ary[0]),
         | 
| 28 | 
            -
                      :python? => true
         | 
| 29 | 
            -
                    ))
         | 
| 18 | 
            +
                  JSON(output).map do |(name, version, install_dir)|
         | 
| 19 | 
            +
                    PipPackage.new(
         | 
| 20 | 
            +
                      name,
         | 
| 21 | 
            +
                      version,
         | 
| 22 | 
            +
                      File.join(install_dir, name),
         | 
| 23 | 
            +
                      pypi_def(name, version)
         | 
| 24 | 
            +
                    )
         | 
| 30 25 | 
             
                  end
         | 
| 31 26 | 
             
                end
         | 
| 32 27 |  | 
| 33 | 
            -
                def self. | 
| 28 | 
            +
                def self.active?
         | 
| 34 29 | 
             
                  File.exists?(requirements_path)
         | 
| 35 30 | 
             
                end
         | 
| 36 31 |  | 
| 37 | 
            -
                def self.license_for(package)
         | 
| 38 | 
            -
                  info = package.json
         | 
| 39 | 
            -
                  license = info.fetch("license", "UNKNOWN")
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                  if license == "UNKNOWN"
         | 
| 42 | 
            -
                    classifiers = info.fetch("classifiers", [])
         | 
| 43 | 
            -
                    license = classifiers.map do |c|
         | 
| 44 | 
            -
                      if c.start_with?("License")
         | 
| 45 | 
            -
                        c.gsub(/^License.*::\s*(.*)$/, '\1')
         | 
| 46 | 
            -
                      end
         | 
| 47 | 
            -
                    end.compact.first
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                  license || "other"
         | 
| 51 | 
            -
                end
         | 
| 52 | 
            -
             | 
| 53 32 | 
             
                private
         | 
| 54 33 |  | 
| 55 34 | 
             
                def self.requirements_path
         | 
| 56 35 | 
             
                  Pathname.new('requirements.txt').expand_path
         | 
| 57 36 | 
             
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def self.pypi_def(name, version)
         | 
| 39 | 
            +
                  response = HTTParty.get("https://pypi.python.org/pypi/#{name}/#{version}/json")
         | 
| 40 | 
            +
                  if response.code == 200
         | 
| 41 | 
            +
                    JSON.parse(response.body).fetch("info", {})
         | 
| 42 | 
            +
                  else
         | 
| 43 | 
            +
                    {}
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 58 46 | 
             
              end
         | 
| 59 | 
            -
            end
         | 
| 47 | 
            +
            end
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            module LicenseFinder
         | 
| 2 | 
            +
              class PipPackage < Package
         | 
| 3 | 
            +
                def initialize(name, version, install_path, pypi_def)
         | 
| 4 | 
            +
                  @name = name
         | 
| 5 | 
            +
                  @version = version
         | 
| 6 | 
            +
                  @install_path = install_path
         | 
| 7 | 
            +
                  @pypi_def = pypi_def
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                attr_reader :name, :version
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def summary
         | 
| 13 | 
            +
                  pypi_def.fetch("summary", "")
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def description
         | 
| 17 | 
            +
                  pypi_def.fetch("description", "")
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def children
         | 
| 21 | 
            +
                  [] # no way to determine child deps from pip (maybe?)
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def groups
         | 
| 25 | 
            +
                  [] # no concept of dev/test groups in pip (maybe?)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def homepage
         | 
| 29 | 
            +
                  nil # no way to extract homepage from pip (maybe?)
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                private
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                attr_reader :install_path, :pypi_def
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def license_from_spec
         | 
| 37 | 
            +
                  license = pypi_def.fetch("license", "UNKNOWN")
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  if license == "UNKNOWN"
         | 
| 40 | 
            +
                    classifiers = pypi_def.fetch("classifiers", [])
         | 
| 41 | 
            +
                    license = classifiers.map do |c|
         | 
| 42 | 
            +
                      if c.start_with?("License")
         | 
| 43 | 
            +
                        c.gsub(/^License.*::\s*(.*)$/, '\1')
         | 
| 44 | 
            +
                      end
         | 
| 45 | 
            +
                    end.compact.first
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  license
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
            end
         | 
| @@ -1,27 +1,15 @@ | |
| 1 1 | 
             
            module LicenseFinder
         | 
| 2 2 | 
             
              module Platform
         | 
| 3 3 | 
             
                def self.sqlite_adapter
         | 
| 4 | 
            -
                   | 
| 5 | 
            -
                    'jdbc:sqlite'
         | 
| 6 | 
            -
                  else
         | 
| 7 | 
            -
                    'sqlite'
         | 
| 8 | 
            -
                  end
         | 
| 4 | 
            +
                  java? ? 'jdbc:sqlite' : 'sqlite'
         | 
| 9 5 | 
             
                end
         | 
| 10 6 |  | 
| 11 7 | 
             
                def self.sqlite_gem
         | 
| 12 | 
            -
                   | 
| 13 | 
            -
                    'jdbc-sqlite3'
         | 
| 14 | 
            -
                  else
         | 
| 15 | 
            -
                    'sqlite3'
         | 
| 16 | 
            -
                  end
         | 
| 8 | 
            +
                  java? ? 'jdbc-sqlite3' : 'sqlite3'
         | 
| 17 9 | 
             
                end
         | 
| 18 10 |  | 
| 19 11 | 
             
                def self.sqlite_load_path
         | 
| 20 | 
            -
                   | 
| 21 | 
            -
                    'jdbc/sqlite3'
         | 
| 22 | 
            -
                  else
         | 
| 23 | 
            -
                    'sqlite3'
         | 
| 24 | 
            -
                  end
         | 
| 12 | 
            +
                  java? ? 'jdbc/sqlite3' : 'sqlite3'
         | 
| 25 13 | 
             
                end
         | 
| 26 14 |  | 
| 27 15 | 
             
                def self.java?
         | 
| @@ -2,6 +2,10 @@ module LicenseFinder | |
| 2 2 | 
             
              class PossibleLicenseFiles
         | 
| 3 3 | 
             
                LICENSE_FILE_NAMES = %w(LICENSE License Licence COPYING README Readme ReadMe)
         | 
| 4 4 |  | 
| 5 | 
            +
                def self.find(install_path)
         | 
| 6 | 
            +
                  new(install_path).find
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 5 9 | 
             
                def initialize(install_path)
         | 
| 6 10 | 
             
                  @install_path = install_path
         | 
| 7 11 | 
             
                end
         | 
| @@ -2,6 +2,6 @@ require 'rubygems' | |
| 2 2 | 
             
            require 'sequel'
         | 
| 3 3 | 
             
            require LicenseFinder::Platform.sqlite_load_path
         | 
| 4 4 |  | 
| 5 | 
            -
            DB = Sequel.connect("#{LicenseFinder::Platform.sqlite_adapter}://#{LicenseFinder.config.database_uri}")
         | 
| 5 | 
            +
            LicenseFinder::DB = Sequel.connect("#{LicenseFinder::Platform.sqlite_adapter}://#{LicenseFinder.config.database_uri}")
         | 
| 6 6 | 
             
            Sequel.extension :migration, :core_extensions
         | 
| 7 | 
            -
            Sequel::Migrator.run(DB, LicenseFinder::ROOT_PATH.join('../db/migrate'))
         | 
| 7 | 
            +
            Sequel::Migrator.run(LicenseFinder::DB, LicenseFinder::ROOT_PATH.join('../db/migrate'))
         | 
| @@ -2,18 +2,17 @@ module LicenseFinder | |
| 2 2 | 
             
              class Dependency < Sequel::Model
         | 
| 3 3 | 
             
                plugin :boolean_readers
         | 
| 4 4 | 
             
                many_to_one :license, class: LicenseAlias
         | 
| 5 | 
            -
                many_to_one :approval
         | 
| 6 5 | 
             
                many_to_many :children, join_table: :ancestries, left_key: :parent_dependency_id, right_key: :child_dependency_id, class: self
         | 
| 7 6 | 
             
                many_to_many :parents, join_table: :ancestries, left_key: :child_dependency_id, right_key: :parent_dependency_id, class: self
         | 
| 8 7 | 
             
                many_to_many :bundler_groups
         | 
| 9 8 |  | 
| 10 9 | 
             
                dataset_module do
         | 
| 11 | 
            -
                  def  | 
| 12 | 
            -
                     | 
| 10 | 
            +
                  def managed
         | 
| 11 | 
            +
                    manually_managed.invert
         | 
| 13 12 | 
             
                  end
         | 
| 14 13 |  | 
| 15 | 
            -
                  def  | 
| 16 | 
            -
                     | 
| 14 | 
            +
                  def manually_managed
         | 
| 15 | 
            +
                    where(manual: true)
         | 
| 17 16 | 
             
                  end
         | 
| 18 17 |  | 
| 19 18 | 
             
                  def obsolete(current)
         | 
| @@ -26,32 +25,58 @@ module LicenseFinder | |
| 26 25 | 
             
                end
         | 
| 27 26 |  | 
| 28 27 | 
             
                def self.named(name)
         | 
| 29 | 
            -
                   | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 28 | 
            +
                  find_or_create(name: name.to_s)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def bundler_group_names=(names)
         | 
| 32 | 
            +
                  current_groups = names.map { |name| BundlerGroup.named(name) }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  remove, add = set_diff(bundler_groups, current_groups)
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  remove.each { |g| remove_bundler_group(g) }
         | 
| 37 | 
            +
                  add.each { |g| add_bundler_group(g) }
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def children_names=(names)
         | 
| 41 | 
            +
                  current_children = names.map { |name| Dependency.named(name) }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  remove, add = set_diff(children, current_children)
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  remove.each { |c| remove_child(c) }
         | 
| 46 | 
            +
                  add.each { |c| add_child(c) }
         | 
| 32 47 | 
             
                end
         | 
| 33 48 |  | 
| 34 49 | 
             
                def approve!
         | 
| 35 | 
            -
                   | 
| 36 | 
            -
                   | 
| 50 | 
            +
                  self.manually_approved = true
         | 
| 51 | 
            +
                  save
         | 
| 37 52 | 
             
                end
         | 
| 38 53 |  | 
| 39 54 | 
             
                def approved?
         | 
| 40 | 
            -
                   | 
| 41 | 
            -
                  # as truthy, so we catch this here for jruby support.
         | 
| 42 | 
            -
                  (license && license.whitelisted?) || (approval.state && approval.state != 0)
         | 
| 55 | 
            +
                  (license && license.whitelisted?) || manually_approved?
         | 
| 43 56 | 
             
                end
         | 
| 44 57 |  | 
| 45 58 | 
             
                def set_license_manually!(license_name)
         | 
| 46 | 
            -
                  self.license = LicenseAlias. | 
| 59 | 
            +
                  self.license = LicenseAlias.named(license_name)
         | 
| 47 60 | 
             
                  self.license_manual = true
         | 
| 48 61 | 
             
                  save
         | 
| 49 62 | 
             
                end
         | 
| 50 63 |  | 
| 51 | 
            -
                def  | 
| 52 | 
            -
                  return if  | 
| 53 | 
            -
                   | 
| 54 | 
            -
             | 
| 64 | 
            +
                def apply_better_license(license_name)
         | 
| 65 | 
            +
                  return if license_manual
         | 
| 66 | 
            +
                  if license.nil? || license.name != license_name
         | 
| 67 | 
            +
                    self.license = LicenseAlias.named(license_name)
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                private
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                # Foreign method, belongs on Set
         | 
| 74 | 
            +
                #
         | 
| 75 | 
            +
                # Returns a pair of sets, which contain the elements that would have to be
         | 
| 76 | 
            +
                # removed from (and respectively added to) the first set in order to obtain
         | 
| 77 | 
            +
                # the second set.
         | 
| 78 | 
            +
                def set_diff(older, newer)
         | 
| 79 | 
            +
                  return older - newer, newer - older
         | 
| 55 80 | 
             
                end
         | 
| 56 81 | 
             
              end
         | 
| 57 82 | 
             
            end
         | 
| @@ -40,8 +40,7 @@ module LicenseFinder | |
| 40 40 | 
             
                def convert
         | 
| 41 41 | 
             
                  @dep = create_dependency
         | 
| 42 42 | 
             
                  @dep.license = create_license
         | 
| 43 | 
            -
                  @dep. | 
| 44 | 
            -
                  @dep.manual = non_bundler_source?
         | 
| 43 | 
            +
                  @dep.manual = manually_managed?
         | 
| 45 44 | 
             
                  associate_bundler_groups
         | 
| 46 45 | 
             
                  @dep.save
         | 
| 47 46 | 
             
                end
         | 
| @@ -58,8 +57,8 @@ module LicenseFinder | |
| 58 57 | 
             
                  end
         | 
| 59 58 | 
             
                end
         | 
| 60 59 |  | 
| 61 | 
            -
                def  | 
| 62 | 
            -
                  @legacy_attrs['source']  | 
| 60 | 
            +
                def manually_managed?
         | 
| 61 | 
            +
                  @legacy_attrs['source'] != "bundle"
         | 
| 63 62 | 
             
                end
         | 
| 64 63 |  | 
| 65 64 | 
             
                def create_dependency
         | 
| @@ -70,10 +69,6 @@ module LicenseFinder | |
| 70 69 | 
             
                  LicenseAlias.find_or_create(name: legacy_attrs['license'])
         | 
| 71 70 | 
             
                end
         | 
| 72 71 |  | 
| 73 | 
            -
                def create_approval
         | 
| 74 | 
            -
                  Sql::Approval.convert(legacy_attrs)
         | 
| 75 | 
            -
                end
         | 
| 76 | 
            -
             | 
| 77 72 | 
             
                def find_children
         | 
| 78 73 | 
             
                  Sql::Dependency.where(name: legacy_attrs['children'])
         | 
| 79 74 | 
             
                end
         | 
| @@ -85,38 +80,35 @@ module LicenseFinder | |
| 85 80 | 
             
                end
         | 
| 86 81 |  | 
| 87 82 | 
             
                module Sql
         | 
| 88 | 
            -
                   | 
| 89 | 
            -
                     | 
| 83 | 
            +
                  class Dependency < Sequel::Model
         | 
| 84 | 
            +
                    plugin :boolean_readers
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    many_to_one :license, class: LicenseAlias
         | 
| 87 | 
            +
                    many_to_many :children, join_table: :ancestries, left_key: :parent_dependency_id, right_key: :child_dependency_id, class: self
         | 
| 88 | 
            +
                    many_to_many :bundler_groups
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                    VALID_ATTRIBUTES = {
         | 
| 91 | 
            +
                      'name' => 'name',
         | 
| 92 | 
            +
                      'version' => 'version',
         | 
| 93 | 
            +
                      'summary' => 'summary',
         | 
| 94 | 
            +
                      'description' => 'description',
         | 
| 95 | 
            +
                      'homepage' => 'homepage',
         | 
| 96 | 
            +
                      'approved' => 'manually_approved'
         | 
| 97 | 
            +
                    }
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                    def self.convert(attrs)
         | 
| 90 100 | 
             
                      create remap_attrs(attrs)
         | 
| 91 101 | 
             
                    end
         | 
| 92 102 |  | 
| 93 | 
            -
                    def remap_attrs(legacy_attrs)
         | 
| 94 | 
            -
                       | 
| 103 | 
            +
                    def self.remap_attrs(legacy_attrs)
         | 
| 104 | 
            +
                      VALID_ATTRIBUTES.each_with_object({}) do |(legacy_key, new_key), new_attrs|
         | 
| 95 105 | 
             
                        new_attrs[new_key] = legacy_attrs[legacy_key]
         | 
| 96 106 | 
             
                      end
         | 
| 97 107 | 
             
                    end
         | 
| 98 108 | 
             
                  end
         | 
| 99 109 |  | 
| 100 | 
            -
                  class Dependency < Sequel::Model
         | 
| 101 | 
            -
                    extend Convertable
         | 
| 102 | 
            -
                    VALID_ATTRIBUTES = Hash[*%w[name version summary description homepage].map { |k| [k, k] }.flatten]
         | 
| 103 | 
            -
             | 
| 104 | 
            -
                    many_to_one :license, class: LicenseAlias
         | 
| 105 | 
            -
                    many_to_one :approval
         | 
| 106 | 
            -
                    many_to_many :children, join_table: :ancestries, left_key: :parent_dependency_id, right_key: :child_dependency_id, class: self
         | 
| 107 | 
            -
                    many_to_many :bundler_groups
         | 
| 108 | 
            -
                  end
         | 
| 109 | 
            -
             | 
| 110 110 | 
             
                  class BundlerGroup < Sequel::Model
         | 
| 111 111 | 
             
                  end
         | 
| 112 | 
            -
             | 
| 113 | 
            -
                  class Approval < Sequel::Model
         | 
| 114 | 
            -
                    extend Convertable
         | 
| 115 | 
            -
             | 
| 116 | 
            -
                    VALID_ATTRIBUTES = {
         | 
| 117 | 
            -
                      'approved' => 'state'
         | 
| 118 | 
            -
                    }
         | 
| 119 | 
            -
                  end
         | 
| 120 112 | 
             
                end
         | 
| 121 113 | 
             
              end
         | 
| 122 114 | 
             
            end
         |