class Licensed::Sources::Cargo
Public Instance Methods
cargo_metadata()
click to toggle source
Returns parsed JSON metadata returned from the cargo CLI
# File lib/licensed/sources/cargo.rb, line 56 def cargo_metadata @cargo_metadata ||= JSON.parse(cargo_metadata_command) rescue JSON::ParserError => e message = "Licensed was unable to parse the output from 'cargo metadata'. JSON Error: #{e.message}" raise Licensed::Sources::Source::Error, message end
cargo_metadata_command()
click to toggle source
Runs a command to get cargo metadata for the current package
# File lib/licensed/sources/cargo.rb, line 64 def cargo_metadata_command options = Array(config.dig("cargo", "metadata_options")).flat_map(&:split) Licensed::Shell.execute("cargo", "metadata", "--format-version=1", *options) end
cargo_metadata_packages()
click to toggle source
Returns a hash of id => package pairs sourced from the “packages” cargo metadata property
# File lib/licensed/sources/cargo.rb, line 44 def cargo_metadata_packages @cargo_metadata_packages ||= cargo_metadata["packages"].each_with_object({}) do |package, hsh| hsh[package["id"]] = package end end
cargo_metadata_resolved_node_ids()
click to toggle source
Returns the ids of all resolved nodes used to build the current package
# File lib/licensed/sources/cargo.rb, line 36 def cargo_metadata_resolved_node_ids cargo_metadata.dig("resolve", "nodes") .map { |node| node["id"] } .reject { |id| cargo_metadata_workspace_members.include?(id) } end
cargo_metadata_workspace_members()
click to toggle source
Returns a set of the ids of packages in the current workspace
# File lib/licensed/sources/cargo.rb, line 51 def cargo_metadata_workspace_members @cargo_metadata_workspace_members ||= Set.new(Array(cargo_metadata["workspace_members"])) end
enabled?()
click to toggle source
Source
is enabled when the cargo tool and Cargo.toml manifest file are available
# File lib/licensed/sources/cargo.rb, line 9 def enabled? return false unless Licensed::Shell.tool_available?("cargo") config.pwd.join("Cargo.toml").exist? end
enumerate_dependencies()
click to toggle source
# File lib/licensed/sources/cargo.rb, line 14 def enumerate_dependencies packages.map do |package| Dependency.new( name: "#{package["name"]}-#{package["version"]}", version: package["version"], path: File.dirname(package["manifest_path"]), metadata: { "name" => package["name"], "type" => Cargo.type, "summary" => package["description"], "homepage" => package["homepage"] } ) end end
packages()
click to toggle source
Returns the package data for all dependencies used to build the current package
# File lib/licensed/sources/cargo.rb, line 31 def packages cargo_metadata_resolved_node_ids.map { |id| cargo_metadata_packages[id] } end