class Registry

Tracks which installed skills are owned by which gems.

Nested Classes and Modules

class Invalid

Raised when the registry cannot be safely interpreted.

Definitions

def initialize(path)

Initialize a registry stored at the given path.

Signature

parameter path String

The registry file path.

Implementation

def initialize(path)
	@path = path
	@data = load_data
end

def owner(skill_name)

Get ownership metadata for a skill.

Signature

parameter skill_name String

The installed skill name.

Implementation

def owner(skill_name)
	@data["skills"][skill_name]
end

def skills_for(gem_name)

Get all skills owned by a gem.

Signature

parameter gem_name String

The provider gem name.

Implementation

def skills_for(gem_name)
	@data["skills"].select do |_skill_name, owner|
		owner["gem"] == gem_name
	end
end

def claim(skill_name, gem_name, gem_version)

Record ownership of an installed skill.

Signature

parameter skill_name String

The installed skill name.

parameter gem_name String

The provider gem name.

parameter gem_version String

The provider gem version.

Implementation

def claim(skill_name, gem_name, gem_version)
	@data["skills"][skill_name] = {
		"gem" => gem_name,
		"version" => gem_version,
	}
end

def release(skill_name)

Remove ownership information for a skill.

Signature

parameter skill_name String

The installed skill name.

Implementation

def release(skill_name)
	@data["skills"].delete(skill_name)
end

def save

Persist the registry atomically.

Implementation

def save
	FileUtils.mkdir_p(File.dirname(@path))
	
	content = {
		"version" => FORMAT_VERSION,
		"skills" => @data["skills"].sort.to_h,
	}.to_yaml
	
	temporary_path = "#{@path}.#{Process.pid}.tmp"
	File.write(temporary_path, content)
	File.rename(temporary_path, @path)
ensure
	FileUtils.rm_f(temporary_path) if temporary_path
end