class LicenseFinder::Package
-
otherwise, override #licenses_from_spec or #license_files
the constructor options
- if the package’s files can be searched for licenses pass :install_path in
constructor options
- if the package specs will report license names, pass :spec_licenses in the
package manager
- subclass Package, and initialize based on the data you receive from the
Guidance on adding a new system
systems (gems, npm, pip, etc.) to a common interface.
Super-class that adapts data from different package management
def self.license_names_from_standard_spec(spec)
def self.license_names_from_standard_spec(spec) licenses = spec['licenses'] || [spec['license']].compact licenses = [licenses] unless licenses.is_a?(Array) licenses = licenses.flatten licenses.map do |license| if license.is_a? Hash license['type'] else license end end end
def <=>(other)
def <=>(other) eq_name = name <=> other.name return eq_name unless eq_name.zero? version <=> other.version end
def activations
def activations licensing.activations.tap do |activations| activations.each { |activation| log_activation activation } end end
def approved?
def approved? # Question: is `!restricted?` redundant? # DecisionApplier does not call `permitted!` or `approved_manually!` # if a Package has been restricted. (approved_manually? || permitted?) && !restricted? end
def approved_manually!(approval)
def approved_manually!(approval) @manual_approval = approval end
def approved_manually?
def approved_manually? !@manual_approval.nil? end
def decide_on_license(license)
def decide_on_license(license) @decided_licenses << license end
def eql?(other)
def eql?(other) name == other.name && version == other.version end
def hash
def hash [name, version].hash end
def initialize(name, version = nil, options = {})
def initialize(name, version = nil, options = {}) @logger = options[:logger] || Core.default_logger ## DESCRIPTION @name = name @version = version || '' @authors = options[:authors] || '' @summary = options[:summary] || '' @description = options[:description] || '' @homepage = options[:homepage] || '' @package_url = options[:package_url].to_s @children = options[:children] || [] @parents = Set.new # will be figured out later by package manager @groups = options[:groups] || [] ## APPROVAL @permitted = false @restricted = false @manual_approval = nil ## LICENSING @license_names_from_spec = options[:spec_licenses] || [] @install_path = options[:install_path] @missing = options[:missing] || false @decided_licenses = Set.new end
def license_files
def license_files LicenseFiles.find(install_path, logger: logger) end
def licenses
def licenses @licenses ||= activations.map(&:license).sort_by(&:name).to_set end
def licenses_from_spec
def licenses_from_spec license_names_from_spec .map { |name| License.find_by_name(name) } .to_set end
def licensing
def licensing Licensing.new(self, @decided_licenses, licenses_from_spec, license_files) end
def log_activation(activation)
def log_activation(activation) preamble = format('package %s:', activation.package.name) if activation.sources.empty? logger.debug activation.package.class, format('%s no licenses found', preamble) else activation.sources.each do |source| logger.debug activation.package.class, format("%s found license '%s' %s", preamble, activation.license.name, source) end end end
def missing?
def missing? @missing end
def notice_files
def notice_files NoticeFiles.find(install_path, logger: logger) end
def package_manager
def package_manager 'unknown' end
def permitted!
def permitted! @permitted = true end
def permitted?
def permitted? @permitted end
def restricted!
def restricted! @restricted = true end
def restricted?
def restricted? @restricted end