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?, #capture, command_exists?, current_packages, #current_packages_with_relations, #initialize, installed?, package_management_command, package_managers

Constructor Details

This class inherits a constructor from LicenseFinder::PackageManager

Instance Method Details

#assembliesObject



16
17
18
19
20
21
22
# File 'lib/license_finder/package_managers/nuget.rb', line 16

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



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

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

#dependenciesObject



44
45
46
# File 'lib/license_finder/package_managers/nuget.rb', line 44

def dependencies
  assemblies.flat_map(&:dependencies)
end

#license_urls(dep) ⇒ Object



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

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)
  end
end

#package_pathObject



6
7
8
9
10
11
12
13
14
# File 'lib/license_finder/package_managers/nuget.rb', line 6

def package_path
  path = project_path.join("vendor/*.nupkg")
  nuget_dir = Dir[path].map{|pkg| File.dirname(pkg)}.uniq
  if nuget_dir.length == 0
    project_path.join(".nuget")
  else
    Pathname(nuget_dir.first)
  end
end