cc-os/plugins/cc-architect/scripts/plugin_config/operations/unregister.rb

56 lines
1.3 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require_relative 'base'
require_relative '../expectations'
module PluginConfig
module Operations
class Unregister < Base
def call
path = marketplace_file
# Validate marketplace schema if file exists
if path && File.exist?(path)
check_result = Expectations.check(path, %w[name plugins])
raise SchemaError, check_result unless check_result[:ok]
end
data = read_json(path)
unless data
return {
status: 'error',
error: "Marketplace file not found or invalid: #{path}"
}
end
data['plugins'] ||= []
original_count = data['plugins'].length
data['plugins'].reject! { |p| p['name'] == plugin }
if data['plugins'].length == original_count
return {
status: 'not_found',
plugin: plugin,
path: path,
verified: true
}
end
write_json(path, data)
readback = read_json(path)
absent = readback && readback['plugins']&.none? { |p| p['name'] == plugin }
{
status: 'unregistered',
plugin: plugin,
path: path,
verified: absent == true
}
end
end
end
end