Class: Glossarist::ReferenceResolver
- Inherits:
-
Object
- Object
- Glossarist::ReferenceResolver
- Defined in:
- lib/glossarist/reference_resolver.rb
Instance Method Summary collapse
- #add_route(from:, to:) ⇒ Object
-
#initialize ⇒ ReferenceResolver
constructor
A new instance of ReferenceResolver.
- #load_collection(collection_dir) ⇒ Object
- #register_package(package_or_concepts, uri_prefix: nil) ⇒ Object
- #register_remote(uri_prefix:, endpoint:) ⇒ Object
- #register_self(concepts) ⇒ Object
- #registered_datasets ⇒ Object
- #resolve(reference) ⇒ Object
- #resolve_all(concept, extractor: nil) ⇒ Object
- #validate_all(package_or_concepts, extractor: nil, mode: :multi) ⇒ Object
Constructor Details
#initialize ⇒ ReferenceResolver
Returns a new instance of ReferenceResolver.
5 6 7 8 9 10 |
# File 'lib/glossarist/reference_resolver.rb', line 5 def initialize @local_adapter = nil @package_adapters = [] @route_adapter = ResolutionAdapter::Route.new @remote_adapters = [] end |
Instance Method Details
#add_route(from:, to:) ⇒ Object
25 26 27 |
# File 'lib/glossarist/reference_resolver.rb', line 25 def add_route(from:, to:) @route_adapter.add(from: from, to: to) end |
#load_collection(collection_dir) ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/glossarist/reference_resolver.rb', line 88 def load_collection(collection_dir) config_path = File.join(collection_dir, "collection.yaml") if File.exist?(config_path) load_collection_config(config_path, collection_dir) else load_gcr_directory(collection_dir) end end |
#register_package(package_or_concepts, uri_prefix: nil) ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/glossarist/reference_resolver.rb', line 16 def register_package(package_or_concepts, uri_prefix: nil) concepts = extract_concepts(package_or_concepts) prefix = uri_prefix || infer_uri_prefix(package_or_concepts) raise ArgumentError, "uri_prefix required" unless prefix @package_adapters << ResolutionAdapter::Package.new(concepts, uri_prefix: prefix) end |
#register_remote(uri_prefix:, endpoint:) ⇒ Object
29 30 31 32 |
# File 'lib/glossarist/reference_resolver.rb', line 29 def register_remote(uri_prefix:, endpoint:) @remote_adapters << ResolutionAdapter::Remote.new(uri_prefix: uri_prefix, endpoint: endpoint) end |
#register_self(concepts) ⇒ Object
12 13 14 |
# File 'lib/glossarist/reference_resolver.rb', line 12 def register_self(concepts) @local_adapter = ResolutionAdapter::Local.new(concepts) end |
#registered_datasets ⇒ Object
97 98 99 |
# File 'lib/glossarist/reference_resolver.rb', line 97 def registered_datasets @package_adapters.map(&:uri_prefix) end |
#resolve(reference) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/glossarist/reference_resolver.rb', line 34 def resolve(reference) if reference.local? return @local_adapter&.resolve(reference) end routed_ref = apply_routes(reference) @package_adapters.each do |adapter| result = adapter.resolve(routed_ref) return result if result end @remote_adapters.each do |adapter| result = adapter.resolve(routed_ref) return result if result end nil end |
#resolve_all(concept, extractor: nil) ⇒ Object
54 55 56 57 58 |
# File 'lib/glossarist/reference_resolver.rb', line 54 def resolve_all(concept, extractor: nil) extractor ||= ReferenceExtractor.new refs = extract_refs(concept, extractor) refs.map { |ref| [ref, resolve(ref)] } end |
#validate_all(package_or_concepts, extractor: nil, mode: :multi) ⇒ Object
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 86 |
# File 'lib/glossarist/reference_resolver.rb', line 60 def validate_all(package_or_concepts, extractor: nil, mode: :multi) concepts = extract_concepts(package_or_concepts) extractor ||= ReferenceExtractor.new result = ValidationResult.new concepts.each do |concept| refs = extract_refs(concept, extractor) termid = extract_termid(concept) refs.each do |ref| resolved = resolve(ref) if resolved.nil? scope = ref.local? ? "intra-set" : "inter-set (#{ref.source})" result.add_warning("#{termid}: Unresolvable #{scope} reference: #{ref.term} -> #{ref.concept_id}") end end if mode == :single && !@local_adapter external_refs = refs.select(&:external?) if external_refs.any? result.add_warning("#{termid}: #{external_refs.size} external reference(s) not checked in single mode") end end end result end |