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



21
22
23
24
25
26
27
# File 'lib/license_finder/package_managers/nuget.rb', line 21

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



29
30
31
32
33
34
35
36
# File 'lib/license_finder/package_managers/nuget.rb', line 29

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



49
50
51
# File 'lib/license_finder/package_managers/nuget.rb', line 49

def dependencies
  assemblies.flat_map(&:dependencies)
end

#license_urls(dep) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/license_finder/package_managers/nuget.rb', line 38

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
15
16
17
18
19
# 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
    path = project_path.join(".nuget")
    if File.directory?(path)
      path
    else
      project_path.join("packages")
    end
  else
    Pathname(nuget_dir.first)
  end
end