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
-
#additional_initializers ⇒ Object
readonly
Returns the value of attribute additional_initializers.
-
#block_as_methods ⇒ Object
readonly
Returns the value of attribute block_as_methods.
-
#config_defaults ⇒ Object
readonly
Returns the value of attribute config_defaults.
-
#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.
-
#nested_class_templates ⇒ Object
readonly
Returns the value of attribute nested_class_templates.
-
#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.
-
#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, config_schema: {}, produces: [], consumes: [], owns_receivers: [], open_receivers: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], nested_class_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: [], signature_paths: [], protocol_contracts: [], source_rbs_synthesizer: nil, additional_initializers: []) ⇒ 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, config_schema: {}, produces: [], consumes: [], owns_receivers: [], open_receivers: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], nested_class_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: [], signature_paths: [], protocol_contracts: [], source_rbs_synthesizer: nil, additional_initializers: []) ⇒ Manifest
rubocop:disable Metrics/ParameterLists
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 80 81 82 83 84 85 |
# File 'lib/rigor/plugin/manifest.rb', line 50 def initialize( # rubocop:disable Metrics/ParameterLists id:, version:, description: nil, config_schema: {}, produces: [], consumes: [], owns_receivers: [], open_receivers: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], nested_class_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: [], signature_paths: [], protocol_contracts: [], source_rbs_synthesizer: nil, additional_initializers: [] ) validate_id!(id) validate_version!(version) 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_nested_class_templates!(nested_class_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) validate_additional_initializers!(additional_initializers) assign_fields(id, version, description, 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) assign_nested_class_templates(nested_class_templates) assign_additional_initializers(additional_initializers) freeze end |
Instance Attribute Details
#additional_initializers ⇒ Object (readonly)
Returns the value of attribute additional_initializers.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def additional_initializers @additional_initializers end |
#block_as_methods ⇒ Object (readonly)
Returns the value of attribute block_as_methods.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def block_as_methods @block_as_methods end |
#config_defaults ⇒ Object (readonly)
Returns the value of attribute config_defaults.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def config_defaults @config_defaults end |
#config_schema ⇒ Object (readonly)
Returns the value of attribute config_schema.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def config_schema @config_schema end |
#consumes ⇒ Object (readonly)
Returns the value of attribute consumes.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def consumes @consumes end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def description @description end |
#external_files ⇒ Object (readonly)
Returns the value of attribute external_files.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def external_files @external_files end |
#heredoc_templates ⇒ Object (readonly)
Returns the value of attribute heredoc_templates.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def heredoc_templates @heredoc_templates end |
#hkt_definitions ⇒ Object (readonly)
Returns the value of attribute hkt_definitions.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def hkt_definitions @hkt_definitions end |
#hkt_registrations ⇒ Object (readonly)
Returns the value of attribute hkt_registrations.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def hkt_registrations @hkt_registrations end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def id @id end |
#nested_class_templates ⇒ Object (readonly)
Returns the value of attribute nested_class_templates.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def nested_class_templates @nested_class_templates end |
#open_receivers ⇒ Object (readonly)
Returns the value of attribute open_receivers.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def open_receivers @open_receivers end |
#owns_receivers ⇒ Object (readonly)
Returns the value of attribute owns_receivers.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def owns_receivers @owns_receivers end |
#produces ⇒ Object (readonly)
Returns the value of attribute produces.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def produces @produces end |
#protocol_contracts ⇒ Object (readonly)
Returns the value of attribute protocol_contracts.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def protocol_contracts @protocol_contracts end |
#signature_paths ⇒ Object (readonly)
Returns the value of attribute signature_paths.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def signature_paths @signature_paths end |
#source_rbs_synthesizer ⇒ Object (readonly)
Returns the value of attribute source_rbs_synthesizer.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def source_rbs_synthesizer @source_rbs_synthesizer end |
#trait_registries ⇒ Object (readonly)
Returns the value of attribute trait_registries.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def trait_registries @trait_registries end |
#type_node_resolvers ⇒ Object (readonly)
Returns the value of attribute type_node_resolvers.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def type_node_resolvers @type_node_resolvers end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
44 45 46 |
# File 'lib/rigor/plugin/manifest.rb', line 44 def version @version end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
183 184 185 |
# File 'lib/rigor/plugin/manifest.rb', line 183 def ==(other) other.is_a?(Manifest) && to_h == other.to_h end |
#hash ⇒ Object
188 189 190 |
# File 'lib/rigor/plugin/manifest.rb', line 188 def hash to_h.hash end |
#to_h ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/rigor/plugin/manifest.rb', line 157 def to_h # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity { "id" => id, "version" => version, "description" => description, "config_schema" => config_schema.to_h { |k, v| [k, v.to_s] }, "config_defaults" => config_defaults, "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), "nested_class_templates" => nested_class_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, "additional_initializers" => additional_initializers.map(&:to_h) } 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.
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/rigor/plugin/manifest.rb', line 139 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 |