Class: Hyrax::Riiif::FileResolver

Inherits:
Object
  • Object
show all
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

See Also:

Instance Method Summary collapse

Constructor Details

#initializeFileResolver

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_locksConcurrent::Map<Concurrent::ReadWriteLock>

tracks individual file locks

Returns:

  • (Concurrent::Map<Concurrent::ReadWriteLock>)

See Also:



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

Parameters:

  • id (String)

    from iiif manifest

Returns:



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