Module: Rigor::Plugin
- Defined in:
- lib/rigor/plugin.rb,
lib/rigor/plugin/box.rb,
lib/rigor/plugin/base.rb,
lib/rigor/plugin/macro.rb,
lib/rigor/plugin/loader.rb,
lib/rigor/plugin/manifest.rb,
lib/rigor/plugin/registry.rb,
lib/rigor/plugin/services.rb,
lib/rigor/plugin/blueprint.rb,
lib/rigor/plugin/inflector.rb,
lib/rigor/plugin/isolation.rb,
lib/rigor/plugin/fact_store.rb,
lib/rigor/plugin/load_error.rb,
lib/rigor/plugin/io_boundary.rb,
lib/rigor/plugin/node_context.rb,
lib/rigor/plugin/trust_policy.rb,
lib/rigor/plugin/node_rule_walk.rb,
lib/rigor/plugin/protocol_contract.rb,
lib/rigor/plugin/type_node_resolver.rb,
lib/rigor/plugin/access_denied_error.rb,
lib/rigor/plugin/macro/trait_registry.rb,
lib/rigor/plugin/macro/block_as_method.rb,
lib/rigor/plugin/additional_initializer.rb,
lib/rigor/plugin/macro/heredoc_template.rb,
lib/rigor/plugin/macro/nested_class_template.rb,
lib/rigor/plugin/source_rbs_synthesis_reporter.rb,
sig/rigor/plugin.rbs,
sig/rigor/plugin/loader.rbs
Defined Under Namespace
Modules: Box, Inflector, Isolation, Macro
Classes: AccessDeniedError, AdditionalInitializer, Base, Blueprint, ContributionIndex, DefaultHttpClient, FactStore, IoBoundary, LoadError, Loader, Manifest, NodeContext, NodeRuleWalk, ProtocolContract, Registry, Services, SourceRbsSynthesisReporter, TrustPolicy, TypeNodeResolver
Class Method Summary
collapse
Class Method Details
.ids_for_gem(gem_name) ⇒ Object
ADR-88 WD4b — the plugin id(s) gem_name registered on its first in-process load, or [] when the gem
was never loaded this process. The loader consults this when a re-load's require no-ops and the
newly-registered delta is empty, so a bare-string plugin entry still resolves on the second load.
76
77
78
|
# File 'lib/rigor/plugin.rb', line 76
def ids_for_gem(gem_name)
@mutex.synchronize { @gem_registrations[gem_name.to_s] } || []
end
|
.record_gem_registration(gem_name, ids) ⇒ Object
ADR-88 WD4b — remember, for a gem loaded for the first time this process, the plugin id(s) its
require registered. Idempotent (a repeated first-load records the same ids). See @gem_registrations.
66
67
68
69
70
71
|
# File 'lib/rigor/plugin.rb', line 66
def record_gem_registration(gem_name, ids)
return if gem_name.nil? || ids.nil? || ids.empty?
@mutex.synchronize { @gem_registrations[gem_name.to_s] = ids.map(&:to_s).freeze }
nil
end
|
.register(plugin_class) ⇒ Class
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/rigor/plugin.rb', line 34
def register(plugin_class)
unless plugin_class.is_a?(Class) && plugin_class < Base
raise ArgumentError,
"Rigor::Plugin.register expects a subclass of Rigor::Plugin::Base, got #{plugin_class.inspect}"
end
manifest = plugin_class.manifest @mutex.synchronize do
existing = @registered[manifest.id]
if existing && existing != plugin_class
raise LoadError.new(
"plugin id #{manifest.id.inspect} already registered to #{existing}, " \
"cannot re-register to #{plugin_class}",
plugin_ref: manifest.id
)
end
@registered[manifest.id] = plugin_class
end
plugin_class
end
|
.registered ⇒ Hash[String, Class]
60
61
62
|
# File 'lib/rigor/plugin.rb', line 60
def registered
@mutex.synchronize { @registered.dup.freeze }
end
|
.registered_for(id) ⇒ Class?
56
57
58
|
# File 'lib/rigor/plugin.rb', line 56
def registered_for(id)
@mutex.synchronize { @registered[id.to_s] }
end
|
.unregister!(id = nil) ⇒ Object
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/rigor/plugin.rb', line 80
def unregister!(id = nil)
@mutex.synchronize do
if id.nil?
@registered.clear
@gem_registrations.clear
else
@registered.delete(id.to_s)
end
end
end
|