class LicenseScout::DependencyManager::Cargo

Public Instance Methods

dependencies() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 43
def dependencies
  dependency_data.map do |crate_data|
    dep_name = crate_data["name"]
    dep_version = crate_data["version"]
    dep_license = crate_data["license"]

    dependency = new_dependency(dep_name, dep_version, nil)
    dependency.add_license(dep_license, "https://crates.io/crates/#{dep_name}/#{dep_version}")

    dependency
  end.compact
end
detected?() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 39
def detected?
  File.exist?(cargo_file_path) && File.exist?(cargo_lockfile_path)
end
install_command() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 35
def install_command
  "cargo build"
end
name() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 23
def name
  "rust_cargo"
end
signature() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 31
def signature
  "Cargo and Cargo.lock files"
end
type() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 27
def type
  "rust"
end

Private Instance Methods

cargo_file_path() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 85
def cargo_file_path
  File.join(directory, "Cargo.toml")
end
cargo_lockfile_path() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 89
def cargo_lockfile_path
  File.join(directory, "Cargo.lock")
end
dependency_data() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 58
def dependency_data
  Dir.chdir(directory) do
    install_cargo_license_crate

    s = Mixlib::ShellOut.new("cargo-license -d -j")
    s.run_command
    s.error!

    json_dep_data = s.stdout
    FFI_Yajl::Parser.parse(json_dep_data)
  end
end
install_cargo_license_crate() click to toggle source
# File lib/license_scout/dependency_manager/cargo.rb, line 71
def install_cargo_license_crate
  # Attempt to install cargo-license
  s = Mixlib::ShellOut.new("cargo install cargo-license")
  s.run_command

  # If cargo-license is already installed, it will return an error
  # but we can ignore it
  # Any other error, however, should halt the process and be returned
  # to the user
  if s.stderr != "" && s.stderr !~ /binary `cargo-license` already exists/
    s.error!
  end
end