Class: LicenseFinder::Package

Inherits:
Object
  • Object
show all
Defined in:
lib/license_finder/package.rb

Overview

Super-class that adapts data from different package management systems (gems, npm, pip, etc.) to a common interface.

For guidance on adding a new system use the shared behavior

it_behaves_like "a Package"

Additional guidelines are:

  • if you’re going to use Package#licenses …

    • implement #licenses_names_from_spec

    • implement #install_path

  • else

    • implement #licenses

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Package

Returns a new instance of Package.



32
33
34
# File 'lib/license_finder/package.rb', line 32

def initialize options={}
  @logger = options[:logger] || LicenseFinder::Logger::Default.new
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



18
19
20
# File 'lib/license_finder/package.rb', line 18

def logger
  @logger
end

Class Method Details

.license_names_from_standard_spec(spec) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/license_finder/package.rb', line 20

def self.license_names_from_standard_spec(spec)
  licenses = spec["licenses"] || [spec["license"]].compact
  licenses = [licenses] unless licenses.is_a?(Array)
  licenses.map do |license|
    if license.is_a? Hash
      license["type"]
    else
      license
    end
  end
end

Instance Method Details

#default_licenseObject



70
71
72
# File 'lib/license_finder/package.rb', line 70

def default_license
  License.find_by_name nil
end

#determine_licenseObject



40
41
42
43
44
45
46
47
48
# File 'lib/license_finder/package.rb', line 40

def determine_license
  lfs = licenses_from_spec
  return lfs if lfs.any?

  lff = licenses_from_files
  return lff if lff.any?

  [default_license].to_set
end

#install_pathObject



74
75
76
# File 'lib/license_finder/package.rb', line 74

def install_path
  nil
end

#license_filesObject



66
67
68
# File 'lib/license_finder/package.rb', line 66

def license_files
  PossibleLicenseFiles.find(install_path)
end

#licensesObject



36
37
38
# File 'lib/license_finder/package.rb', line 36

def licenses
  @licenses ||= determine_license.to_set
end

#licenses_from_filesObject



58
59
60
61
62
63
64
# File 'lib/license_finder/package.rb', line 58

def licenses_from_files
  license_files.map do |license_file|
    license_file.license.tap do |license|
      logger.license self.class, self.name, license.name, "from file '#{license_file.path}'" if license
    end
  end.compact.to_set
end

#licenses_from_specObject



50
51
52
53
54
55
56
# File 'lib/license_finder/package.rb', line 50

def licenses_from_spec
  license_names_from_spec.map do |name|
    License.find_by_name(name).tap do |license|
      logger.license self.class, self.name, license.name, "from spec" if license
    end
  end.compact.to_set
end