Class: Rigor::Plugin::Manifest
- Inherits:
-
Object
- Object
- Rigor::Plugin::Manifest
- Defined in:
- lib/rigor/plugin/manifest.rb
Overview
Value object describing one plugin’s identity and metadata. Constructed once per plugin class through Base.manifest; consumed by Loader when matching project configuration entries to registered plugins and by Cache::Descriptor::PluginEntry when deriving cache keys.
The fields are pinned by ADR-2 § “Registration, Configuration, and Caching”; the v0.1.0 plugin contract surface treats this struct as the public manifest shape.
Defined Under Namespace
Classes: Consumption
Constant Summary collapse
- VALID_ID =
Same regex Cache::Store::VALID_PRODUCER_ID uses, so plugin ids round-trip through cache producer ids and ‘plugin.<id>.<rule>` diagnostic identifiers without escape.
/\A[a-z][a-z0-9._-]*\z/- VALID_VALUE_KINDS =
The first-implementation ‘config_schema` accepts these value kinds. Slice 1 only checks key presence and shallow value kind; richer schemas (nested maps, enums) land later when the v0.1.0 protocol slices need them.
%i[string boolean integer array hash any].freeze
Instance Attribute Summary collapse
-
#block_as_methods ⇒ Object
readonly
Returns the value of attribute block_as_methods.
-
#config_schema ⇒ Object
readonly
Returns the value of attribute config_schema.
-
#consumes ⇒ Object
readonly
Returns the value of attribute consumes.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#external_files ⇒ Object
readonly
Returns the value of attribute external_files.
-
#heredoc_templates ⇒ Object
readonly
Returns the value of attribute heredoc_templates.
-
#hkt_definitions ⇒ Object
readonly
Returns the value of attribute hkt_definitions.
-
#hkt_registrations ⇒ Object
readonly
Returns the value of attribute hkt_registrations.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#open_receivers ⇒ Object
readonly
Returns the value of attribute open_receivers.
-
#owns_receivers ⇒ Object
readonly
Returns the value of attribute owns_receivers.
-
#produces ⇒ Object
readonly
Returns the value of attribute produces.
-
#protocol_contracts ⇒ Object
readonly
Returns the value of attribute protocol_contracts.
-
#protocols ⇒ Object
readonly
Returns the value of attribute protocols.
-
#signature_paths ⇒ Object
readonly
Returns the value of attribute signature_paths.
-
#source_rbs_synthesizer ⇒ Object
readonly
Returns the value of attribute source_rbs_synthesizer.
-
#trait_registries ⇒ Object
readonly
Returns the value of attribute trait_registries.
-
#type_node_resolvers ⇒ Object
readonly
Returns the value of attribute type_node_resolvers.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #hash ⇒ Object
-
#initialize(id:, version:, description: nil, protocols: [], config_schema: {}, produces: [], consumes: [], owns_receivers: [], open_receivers: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: [], signature_paths: [], protocol_contracts: [], source_rbs_synthesizer: nil) ⇒ Manifest
constructor
rubocop:disable Metrics/ParameterLists.
-
#to_h ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity.
-
#validate_config(config) ⇒ Object
Validates the user-supplied plugin config block against this manifest’s ‘config_schema`.
Constructor Details
#initialize(id:, version:, description: nil, protocols: [], config_schema: {}, produces: [], consumes: [], owns_receivers: [], open_receivers: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: [], signature_paths: [], protocol_contracts: [], source_rbs_synthesizer: nil) ⇒ Manifest
rubocop:disable Metrics/ParameterLists
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rigor/plugin/manifest.rb', line 48 def initialize( # rubocop:disable Metrics/ParameterLists id:, version:, description: nil, protocols: [], config_schema: {}, produces: [], consumes: [], owns_receivers: [], open_receivers: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: [], signature_paths: [], protocol_contracts: [], source_rbs_synthesizer: nil ) validate_id!(id) validate_version!(version) validate_protocols!(protocols) validate_config_schema!(config_schema) validate_produces!(produces) validate_owns_receivers!(owns_receivers) validate_open_receivers!(open_receivers) validate_type_node_resolvers!(type_node_resolvers) validate_block_as_methods!(block_as_methods) validate_heredoc_templates!(heredoc_templates) validate_trait_registries!(trait_registries) validate_external_files!(external_files) validate_hkt_registrations!(hkt_registrations) validate_hkt_definitions!(hkt_definitions) validate_signature_paths!(signature_paths) validate_protocol_contracts!(protocol_contracts) validate_source_rbs_synthesizer!(source_rbs_synthesizer) assign_fields(id, version, description, protocols, config_schema, produces, consumes, owns_receivers, open_receivers, type_node_resolvers, block_as_methods, heredoc_templates, trait_registries, external_files, hkt_registrations, hkt_definitions, signature_paths, protocol_contracts, source_rbs_synthesizer) freeze end |
Instance Attribute Details
#block_as_methods ⇒ Object (readonly)
Returns the value of attribute block_as_methods.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def block_as_methods @block_as_methods end |
#config_schema ⇒ Object (readonly)
Returns the value of attribute config_schema.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def config_schema @config_schema end |
#consumes ⇒ Object (readonly)
Returns the value of attribute consumes.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def consumes @consumes end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def description @description end |
#external_files ⇒ Object (readonly)
Returns the value of attribute external_files.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def external_files @external_files end |
#heredoc_templates ⇒ Object (readonly)
Returns the value of attribute heredoc_templates.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def heredoc_templates @heredoc_templates end |
#hkt_definitions ⇒ Object (readonly)
Returns the value of attribute hkt_definitions.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def hkt_definitions @hkt_definitions end |
#hkt_registrations ⇒ Object (readonly)
Returns the value of attribute hkt_registrations.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def hkt_registrations @hkt_registrations end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def id @id end |
#open_receivers ⇒ Object (readonly)
Returns the value of attribute open_receivers.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def open_receivers @open_receivers end |
#owns_receivers ⇒ Object (readonly)
Returns the value of attribute owns_receivers.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def owns_receivers @owns_receivers end |
#produces ⇒ Object (readonly)
Returns the value of attribute produces.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def produces @produces end |
#protocol_contracts ⇒ Object (readonly)
Returns the value of attribute protocol_contracts.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def protocol_contracts @protocol_contracts end |
#protocols ⇒ Object (readonly)
Returns the value of attribute protocols.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def protocols @protocols end |
#signature_paths ⇒ Object (readonly)
Returns the value of attribute signature_paths.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def signature_paths @signature_paths end |
#source_rbs_synthesizer ⇒ Object (readonly)
Returns the value of attribute source_rbs_synthesizer.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def source_rbs_synthesizer @source_rbs_synthesizer end |
#trait_registries ⇒ Object (readonly)
Returns the value of attribute trait_registries.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def trait_registries @trait_registries end |
#type_node_resolvers ⇒ Object (readonly)
Returns the value of attribute type_node_resolvers.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def type_node_resolvers @type_node_resolvers end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
43 44 45 |
# File 'lib/rigor/plugin/manifest.rb', line 43 def version @version end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
159 160 161 |
# File 'lib/rigor/plugin/manifest.rb', line 159 def ==(other) other.is_a?(Manifest) && to_h == other.to_h end |
#hash ⇒ Object
164 165 166 |
# File 'lib/rigor/plugin/manifest.rb', line 164 def hash to_h.hash end |
#to_h ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/rigor/plugin/manifest.rb', line 135 def to_h # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity { "id" => id, "version" => version, "description" => description, "protocols" => protocols.map(&:to_s), "config_schema" => config_schema.to_h { |k, v| [k, v.to_s] }, "produces" => produces.map(&:to_s), "consumes" => consumes.map { |c| consumption_hash(c) }, "owns_receivers" => owns_receivers, "open_receivers" => open_receivers, "type_node_resolvers" => type_node_resolvers.map { |r| r.class.name }, "block_as_methods" => block_as_methods.map(&:to_h), "heredoc_templates" => heredoc_templates.map(&:to_h), "trait_registries" => trait_registries.map(&:to_h), "external_files" => external_files.map(&:to_h), "hkt_registrations" => hkt_registrations.map(&:to_h), "hkt_definitions" => hkt_definitions.map { |d| { "uri" => d.uri, "params" => d.params } }, "signature_paths" => signature_paths, "protocol_contracts" => protocol_contracts.map(&:to_h), "source_rbs_synthesizer" => source_rbs_synthesizer&.class&.name } end |
#validate_config(config) ⇒ Object
Validates the user-supplied plugin config block against this manifest’s ‘config_schema`. Returns an array of human-readable error strings (empty when the config is valid). Slice 1 checks only unknown keys and shallow value kind; nested schemas come with later slices.
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/rigor/plugin/manifest.rb', line 117 def validate_config(config) return ["plugin config must be a Hash, got #{config.class}"] unless config.is_a?(Hash) errors = [] config.each do |key, value| key_s = key.to_s unless config_schema.key?(key_s) errors << "unknown config key #{key_s.inspect} for plugin #{id.inspect}" next end kind = config_schema.fetch(key_s) errors << "config key #{key_s.inspect} expected #{kind}, got #{value.class}" unless value_matches?(value, kind) end errors end |