diff options
Diffstat (limited to 'activestorage/lib/active_storage/analyzer.rb')
-rw-r--r-- | activestorage/lib/active_storage/analyzer.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/activestorage/lib/active_storage/analyzer.rb b/activestorage/lib/active_storage/analyzer.rb new file mode 100644 index 0000000000..caa25418a5 --- /dev/null +++ b/activestorage/lib/active_storage/analyzer.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module ActiveStorage + # This is an abstract base class for analyzers, which extract metadata from blobs. See + # ActiveStorage::Analyzer::ImageAnalyzer for an example of a concrete subclass. + class Analyzer + attr_reader :blob + + # Implement this method in a concrete subclass. Have it return true when given a blob from which + # the analyzer can extract metadata. + def self.accept?(blob) + false + end + + def initialize(blob) + @blob = blob + end + + # Override this method in a concrete subclass. Have it return a Hash of metadata. + def metadata + raise NotImplementedError + end + + private + # Downloads the blob to a tempfile on disk. Yields the tempfile. + def download_blob_to_tempfile(&block) #:doc: + blob.open tempdir: tempdir, &block + end + + def logger #:doc: + ActiveStorage.logger + end + + def tempdir #:doc: + Dir.tmpdir + end + end +end |