Class: Dor::MetadataService
- Inherits:
-
Object
- Object
- Dor::MetadataService
- Defined in:
- lib/dor/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
43 44 45 46 |
# File 'lib/dor/metadata_service.rb', line 43 def can_resolve?(identifier) (prefix, identifier) = identifier.split(/:/,2) handlers.keys.include?(prefix.to_sym) end |
.fetch(identifier) ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/dor/metadata_service.rb', line 53 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
67 68 69 70 71 72 73 |
# File 'lib/dor/metadata_service.rb', line 67 def handler_for(prefix) handler = handlers[prefix.to_sym] if handler.nil? raise MetadataError, "Unkown metadata prefix: #{prefix}" end return handler end |
.known_prefixes ⇒ Object
39 40 41 |
# File 'lib/dor/metadata_service.rb', line 39 def known_prefixes return handlers.keys end |
.label_for(identifier) ⇒ Object
61 62 63 64 65 |
# File 'lib/dor/metadata_service.rb', line 61 def label_for(identifier) (prefix, identifier) = identifier.split(/:/,2) handler = handler_for(prefix) handler.label(handler.fetch(prefix, identifier)) end |
.register(handler_class) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/dor/metadata_service.rb', line 26 def register(handler_class) ['fetch', 'label', 'prefixes'].each do |method| unless handler_class.instance_methods.include?(method) raise TypeError, "Metadata handlers must define ##{method.to_s}" end end handler = handler_class.new handler.prefixes.each do |prefix| handlers[prefix.to_sym] = handler end return handler end |
.resolvable(identifiers) ⇒ Object
TODO: Return a prioritized list
49 50 51 |
# File 'lib/dor/metadata_service.rb', line 49 def resolvable(identifiers) identifiers.select { |identifier| self.can_resolve?(identifier) } end |