Class: LicenseFinder::Nuget

Inherits:
PackageManager show all
Defined in:
lib/license_finder/package_managers/nuget.rb

Defined Under Namespace

Classes: Assembly, Dependency

Instance Method Summary collapse

Methods inherited from PackageManager

#active?, command_exists?, #current_packages_with_relations, #detected_package_path, #initialize, installed?, package_management_command, #prepare, prepare_command, takes_priority_over

Constructor Details

This class inherits a constructor from LicenseFinder::PackageManager

Instance Method Details

#assembliesObject



34
35
36
37
38
39
40
# File 'lib/license_finder/package_managers/nuget.rb', line 34

def assemblies
  Dir.glob(project_path.join('**', 'packages.config'), File::FNM_DOTMATCH).map do |d|
    path = Pathname.new(d).dirname
    name = path.basename.to_s
    Assembly.new path, name
  end
end

#current_packagesObject



42
43
44
45
46
47
48
# File 'lib/license_finder/package_managers/nuget.rb', line 42

def current_packages
  dependencies.each_with_object({}) do |dep, memo|
    licenses = license_urls(dep)
    memo[dep.name] ||= NugetPackage.new(dep.name, dep.version, spec_licenses: licenses)
    memo[dep.name].groups << dep.assembly unless memo[dep.name].groups.include? dep.assembly
  end.values
end

#dependenciesObject



61
62
63
# File 'lib/license_finder/package_managers/nuget.rb', line 61

def dependencies
  assemblies.flat_map(&:dependencies)
end

#license_urls(dep) ⇒ Object



50
51
52
53
54
55
56
57
58
59
# File 'lib/license_finder/package_managers/nuget.rb', line 50

def license_urls(dep)
  files = Dir["**/#{dep.name}.#{dep.version}.nupkg"]
  return nil if files.empty?
  file = files.first
  Zip::File.open file do |zipfile|
    content = zipfile.read(dep.name + '.nuspec')
    xml = REXML::Document.new(content)
    REXML::XPath.match(xml, '//metadata//licenseUrl').map(&:get_text).map(&:to_s)
  end
end

#possible_package_pathsObject



25
26
27
28
29
30
31
32
# File 'lib/license_finder/package_managers/nuget.rb', line 25

def possible_package_paths
  path = project_path.join('vendor/*.nupkg')
  nuget_dir = Dir[path].map { |pkg| File.dirname(pkg) }.uniq

  possible_paths = [project_path.join('packages.config'), project_path.join('.nuget')]
  possible_paths.unshift(Pathname(nuget_dir.first)) unless nuget_dir.empty?
  possible_paths
end