Class: Dor::MetadataService
- Inherits:
-
Object
- Object
- Dor::MetadataService
- Defined in:
- lib/dor/services/metadata_service.rb
Overview
class MetadataHandler
def fetch(prefix, identifier)
### Return metadata for prefix/identifier combo
end
def label(metadata)
### Return a Fedora-compatible label from the metadata format returned by #fetch
end
end
Constant Summary collapse
- @@cache =
Cache.new(nil, nil, 250, 300)
Class Method Summary collapse
- .can_resolve?(identifier) ⇒ Boolean
- .fetch(identifier) ⇒ Object
- .handler_for(prefix) ⇒ Object
- .known_prefixes ⇒ Object
- .label_for(identifier) ⇒ Object
- .register(handler_class) ⇒ Object
-
.resolvable(identifiers) ⇒ Object
TODO: Return a prioritized list.
Class Method Details
.can_resolve?(identifier) ⇒ Boolean
40 41 42 43 |
# File 'lib/dor/services/metadata_service.rb', line 40 def can_resolve?(identifier) (prefix, _identifier) = identifier.split(/:/, 2) handlers.keys.include?(prefix.to_sym) end |
.fetch(identifier) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/dor/services/metadata_service.rb', line 50 def fetch(identifier) @@cache.fetch(identifier) do (prefix, identifier) = identifier.split(/:/, 2) handler = handler_for(prefix) handler.fetch(prefix, identifier) end end |
.handler_for(prefix) ⇒ Object
64 65 66 67 68 |
# File 'lib/dor/services/metadata_service.rb', line 64 def handler_for(prefix) handler = handlers[prefix.to_sym] raise MetadataError, "Unkown metadata prefix: #{prefix}" if handler.nil? handler end |
.known_prefixes ⇒ Object
36 37 38 |
# File 'lib/dor/services/metadata_service.rb', line 36 def known_prefixes handlers.keys end |
.label_for(identifier) ⇒ Object
58 59 60 61 62 |
# File 'lib/dor/services/metadata_service.rb', line 58 def label_for(identifier) (prefix, identifier) = identifier.split(/:/, 2) handler = handler_for(prefix) handler.label(handler.fetch(prefix, identifier)) end |
.register(handler_class) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/dor/services/metadata_service.rb', line 23 def register(handler_class) %w(fetch label prefixes).each do |method| unless handler_class.instance_methods.include?(method) || handler_class.instance_methods.include?(method.to_sym) raise TypeError, "Metadata handlers must define ##{method}" end end handler = handler_class.new handler.prefixes.each do |prefix| handlers[prefix.to_sym] = handler end handler end |
.resolvable(identifiers) ⇒ Object
TODO: Return a prioritized list
46 47 48 |
# File 'lib/dor/services/metadata_service.rb', line 46 def resolvable(identifiers) identifiers.select { |identifier| self.can_resolve?(identifier) } end |