class Registry
Tracks which installed skills are owned by which gems.
Nested Classes and Modules
class InvalidRaised when the registry cannot be safely interpreted.
Definitions
def initialize(path)
Initialize a registry stored at the given path.
Signature
-
parameter
pathString 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_nameString 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_nameString 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_nameString The installed skill name.
-
parameter
gem_nameString The provider gem name.
-
parameter
gem_versionString 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_nameString 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