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.
-
#owns_receivers ⇒ Object
readonly
Returns the value of attribute owns_receivers.
-
#produces ⇒ Object
readonly
Returns the value of attribute produces.
-
#protocols ⇒ Object
readonly
Returns the value of attribute protocols.
-
#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: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: []) ⇒ Manifest
constructor
rubocop:disable Metrics/ParameterLists.
-
#to_h ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#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: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: []) ⇒ Manifest
rubocop:disable Metrics/ParameterLists
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rigor/plugin/manifest.rb', line 46 def initialize( # rubocop:disable Metrics/ParameterLists id:, version:, description: nil, protocols: [], config_schema: {}, produces: [], consumes: [], owns_receivers: [], type_node_resolvers: [], block_as_methods: [], heredoc_templates: [], trait_registries: [], external_files: [], hkt_registrations: [], hkt_definitions: [] ) validate_id!(id) validate_version!(version) validate_protocols!(protocols) validate_config_schema!(config_schema) validate_produces!(produces) validate_owns_receivers!(owns_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) assign_fields(id, version, description, protocols, config_schema, produces, consumes, owns_receivers, type_node_resolvers, block_as_methods, heredoc_templates, trait_registries, external_files, hkt_registrations, hkt_definitions) freeze end |
Instance Attribute Details
#block_as_methods ⇒ Object (readonly)
Returns the value of attribute block_as_methods.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def block_as_methods @block_as_methods end |
#config_schema ⇒ Object (readonly)
Returns the value of attribute config_schema.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def config_schema @config_schema end |
#consumes ⇒ Object (readonly)
Returns the value of attribute consumes.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def consumes @consumes end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def description @description end |
#external_files ⇒ Object (readonly)
Returns the value of attribute external_files.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def external_files @external_files end |
#heredoc_templates ⇒ Object (readonly)
Returns the value of attribute heredoc_templates.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def heredoc_templates @heredoc_templates end |
#hkt_definitions ⇒ Object (readonly)
Returns the value of attribute hkt_definitions.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def hkt_definitions @hkt_definitions end |
#hkt_registrations ⇒ Object (readonly)
Returns the value of attribute hkt_registrations.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def hkt_registrations @hkt_registrations end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def id @id end |
#owns_receivers ⇒ Object (readonly)
Returns the value of attribute owns_receivers.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def owns_receivers @owns_receivers end |
#produces ⇒ Object (readonly)
Returns the value of attribute produces.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def produces @produces end |
#protocols ⇒ Object (readonly)
Returns the value of attribute protocols.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def protocols @protocols end |
#trait_registries ⇒ Object (readonly)
Returns the value of attribute trait_registries.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def trait_registries @trait_registries end |
#type_node_resolvers ⇒ Object (readonly)
Returns the value of attribute type_node_resolvers.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def type_node_resolvers @type_node_resolvers end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
42 43 44 |
# File 'lib/rigor/plugin/manifest.rb', line 42 def version @version end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
142 143 144 |
# File 'lib/rigor/plugin/manifest.rb', line 142 def ==(other) other.is_a?(Manifest) && to_h == other.to_h end |
#hash ⇒ Object
147 148 149 |
# File 'lib/rigor/plugin/manifest.rb', line 147 def hash to_h.hash end |
#to_h ⇒ Object
rubocop:disable Metrics/AbcSize
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/rigor/plugin/manifest.rb', line 122 def to_h # rubocop:disable Metrics/AbcSize { "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, "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 } } } 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.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/rigor/plugin/manifest.rb', line 104 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 |