class RbSys::Cargo::Metadata
Extracts metadata from a Cargo project using ‘cargo metadata`.
def cargo_metadata
def cargo_metadata return @cargo_metadata if @cargo_metadata ::Gem.load_yaml cargo = ENV["CARGO"] || "cargo" args = ["metadata", "--format-version", "1"] args << "--no-deps" unless @deps out, stderr, status = Open3.capture3(cargo, *args) raise "exited with non-zero status (#{status})" unless status.success? data = Gem::SafeYAML.safe_load(out) raise "metadata must be a Hash" unless data.is_a?(Hash) @cargo_metadata = data rescue => err raise CargoMetadataError.new(err, stderr) end
def edition
-
(String)
-
def edition package_metadata.fetch("edition") end
def features
-
(Array
-)
def features package_metadata.fetch("features") end
def id
-
(String)
-
def id package_metadata.fetch("id") end
def initialize(name, deps: false)
-
name
(String
) -- the name of the Cargo project
def initialize(name, deps: false) raise ArgumentError, "name must be a String" unless name.is_a?(String) @name = name @cargo_metadata = nil @package_metadata = nil @deps = deps end
def manifest_directory
-
(String)
-
def manifest_directory @manifest_directory ||= File.dirname(manifest_path) end
def manifest_path
-
(String)
-
def manifest_path package_metadata.fetch("manifest_path") end
def metadata
-
(Hash)
-
def metadata package_metadata.fetch("metadata") end
def package_metadata
def package_metadata return @package_metadata if @package_metadata found = cargo_metadata.fetch("packages").find { |p| p.fetch("name") == name } raise PackageNotFoundError, @name unless found @package_metadata = found end
def packages
-
(Array
-)
def packages cargo_metadata.fetch("packages") end
def rb_sys_version
def rb_sys_version pkg = packages.find { |p| p.fetch("name") == "rb-sys" } return unless pkg pkg["version"] end
def target_directory
-
(String)
-
def target_directory cargo_metadata.fetch("target_directory") end
def version
-
(String)
-
def version package_metadata.fetch("version") end
def workspace_root
-
(String)
-
def workspace_root cargo_metadata.fetch("workspace_root") end