Module: ActiveStorage::Blob::Analyzable

Included in:
ActiveStorage::Blob
Defined in:
activestorage/app/models/active_storage/blob/analyzable.rb

Overview

Active Storage Blob Analyzable

Instance Method Summary collapse

Instance Method Details

#analyzeObject

Extracts and stores metadata from the file associated with this blob using a relevant analyzer. Active Storage comes with built-in analyzers for images and videos. See ActiveStorage::Analyzer::ImageAnalyzer and ActiveStorage::Analyzer::VideoAnalyzer for information about the specific attributes they extract and the third-party libraries they require.

To choose the analyzer for a blob, Active Storage calls accept? on each registered analyzer in order. It uses the first analyzer for which accept? returns true when given the blob. If no registered analyzer accepts the blob, no metadata is extracted from it.

In a Rails application, add or remove analyzers by manipulating Rails.application.config.active_storage.analyzers in an initializer:

# Add a custom analyzer for Microsoft Office documents:
Rails.application.config.active_storage.analyzers.append DOCXAnalyzer

# Remove the built-in video analyzer:
Rails.application.config.active_storage.analyzers.delete ActiveStorage::Analyzer::VideoAnalyzer

Outside of a Rails application, manipulate ActiveStorage.analyzers instead.

You won’t ordinarily need to call this method from a Rails application. New blobs are automatically and asynchronously analyzed via #analyze_later when they’re attached for the first time.



29
30
31
# File 'activestorage/app/models/active_storage/blob/analyzable.rb', line 29

def analyze
  update! metadata: .merge()
end

#analyze_laterObject

Enqueues an ActiveStorage::AnalyzeJob which calls #analyze, or calls #analyze inline based on analyzer class configuration.

This method is automatically called for a blob when it’s attached for the first time. You can call it to analyze a blob again (e.g. if you add a new analyzer or modify an existing one).



43
44
45
46
47
48
49
# File 'activestorage/app/models/active_storage/blob/analyzable.rb', line 43

def analyze_later
  if analyzer_class.analyze_later?
    ActiveStorage::AnalyzeJob.perform_later(self)
  else
    analyze
  end
end

#analyze_without_savingObject

Extracts metadata but does not persist it. Used during the upload flow when the blob hasn’t been saved yet.



35
36
37
# File 'activestorage/app/models/active_storage/blob/analyzable.rb', line 35

def analyze_without_saving
  self. = .merge()
end

#analyzed?Boolean

Returns true if the blob has been analyzed.

Returns:

  • (Boolean)


52
53
54
# File 'activestorage/app/models/active_storage/blob/analyzable.rb', line 52

def analyzed?
  analyzed
end