Class: Hyrax::Riiif::FileResolver
- Inherits:
-
Object
- Object
- Hyrax::Riiif::FileResolver
- Includes:
- ActiveSupport::Benchmarkable
- Defined in:
- app/models/hyrax/riiif/file_resolver.rb,
app/models/hyrax/riiif/file_resolver.rb
Overview
Adds file locking to Riiif::File
Instance Method Summary collapse
-
#file_locks ⇒ Concurrent::Map<Concurrent::ReadWriteLock>
tracks individual file locks.
- #find(id) ⇒ Riiif::File
-
#initialize ⇒ FileResolver
constructor
A new instance of FileResolver.
Constructor Details
#initialize ⇒ FileResolver
Returns a new instance of FileResolver.
59 60 61 |
# File 'app/models/hyrax/riiif/file_resolver.rb', line 59 def initialize(*) raise 'Riiif not available' end |
Instance Method Details
#file_locks ⇒ Concurrent::Map<Concurrent::ReadWriteLock>
tracks individual file locks
24 25 26 27 28 |
# File 'app/models/hyrax/riiif/file_resolver.rb', line 24 def file_locks @file_locks ||= Concurrent::Map.new do |k, v| k.compute_if_absent(v) { Concurrent::ReadWriteLock.new } end end |
#find(id) ⇒ Riiif::File
12 13 14 15 16 17 18 19 |
# File 'app/models/hyrax/riiif/file_resolver.rb', line 12 def find(id) path = nil file_locks[id].with_write_lock do path = build_path(id) path = build_path(id, force: true) unless ::File.exist?(path) # Ensures the file is locally available end Hyrax::Riiif::File.new(path, id: id) end |