cc-os/plugins/cc-architect/scripts/plugin_config/expectations.rb

56 lines
1.3 KiB
Ruby

# frozen_string_literal: true
require 'json'
module PluginConfig
class SchemaError < StandardError
attr_reader :check_result
def initialize(check_result)
@check_result = check_result
super(check_result[:error])
end
def to_diagnostic_json
{
error: 'schema_mismatch',
details: check_result
}
end
end
module Expectations
SETTINGS = {
description: 'Project settings file',
required_keys: %w[enabledPlugins]
}.freeze
MARKETPLACE = {
description: 'Marketplace registry',
required_keys: %w[name plugins]
}.freeze
INSTALLED_PLUGINS = {
description: 'Installed plugins registry',
required_keys: %w[plugins]
}.freeze
def self.check(file_path, expected_keys)
unless File.exist?(file_path)
return { ok: false, error: "File not found: #{file_path}", missing_keys: expected_keys }
end
data = JSON.parse(File.read(file_path))
missing = expected_keys.reject { |key| data.key?(key) }
if missing.empty?
{ ok: true }
else
{ ok: false, error: "Missing required keys in #{file_path}", missing_keys: missing }
end
rescue JSON::ParserError => e
{ ok: false, error: "Invalid JSON in #{file_path}: #{e.message}", missing_keys: expected_keys }
end
end
end