Class: ActiveStorage::Service
- Inherits:
- 
      Object
      
        - Object
- ActiveStorage::Service
 
- Extended by:
- ActiveSupport::Autoload
- Defined in:
- lib/active_storage/service.rb
Overview
Abstract class serving as an interface for concrete services.
The available services are:
- 
Disk, to manage attachments saved directly on the hard drive.
- 
GCS, to manage attachments through Google Cloud Storage.
- 
S3, to manage attachments through Amazon S3.
- 
AzureStorage, to manage attachments through Microsoft Azure Storage.
- 
Mirror, to be able to use several services to manage attachments.
Inside a Rails application, you can set-up your services through the generated config/storage.yml file and reference one of the aforementioned constant under the service key. For example:
local:
  service: Disk
  root: <%= Rails.root.join("storage") %>
You can checkout the service's constructor to know which keys are required.
Then, in your application's configuration, you can specify the service to use like this:
config.active_storage.service = :local
If you are using Active Storage outside of a Ruby on Rails application, you can configure the service to use like this:
ActiveStorage::Blob.service = ActiveStorage::Service.configure(
  :Disk,
  root: Pathname("/foo/bar/storage")
)
Direct Known Subclasses
AzureStorageService, DiskService, GCSService, MirrorService, S3Service
Defined Under Namespace
Classes: AzureStorageService, Configurator, DiskService, GCSService, MirrorService, Registry, S3Service
Instance Attribute Summary collapse
- 
  
    
      #name  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    Returns the value of attribute name. 
Class Method Summary collapse
- 
  
    
      .build(configurator:, name:, service: nil, **service_config)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Override in subclasses that stitch together multiple services and hence need to build additional services using the configurator. 
- 
  
    
      .configure(service_name, configurations)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Configure an Active Storage service by name from a set of configurations, typically loaded from a YAML file. 
Instance Method Summary collapse
- 
  
    
      #delete(key)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Delete the file at the key.
- 
  
    
      #delete_prefixed(prefix)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Delete files at keys starting with the prefix.
- 
  
    
      #download(key)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Return the content of the file at the key.
- 
  
    
      #download_chunk(key, range)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Return the partial content in the byte rangeof the file at thekey.
- 
  
    
      #exist?(key)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Return trueif a file exists at thekey.
- 
  
    
      #headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns a Hash of headers for url_for_direct_uploadrequests.
- #open(*args, **options, &block) ⇒ Object
- #public? ⇒ Boolean
- 
  
    
      #update_metadata(key, **metadata)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Update metadata for the file identified by keyin the service.
- 
  
    
      #upload(key, io, checksum: nil, **options)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Upload the ioto thekeyspecified.
- 
  
    
      #url(key, **options)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns the URL for the file at the key.
- 
  
    
      #url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns a signed, temporary URL that a direct upload file can be PUT to on the key.
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
| 44 45 46 | # File 'lib/active_storage/service.rb', line 44 def name @name end | 
Class Method Details
.build(configurator:, name:, service: nil, **service_config) ⇒ Object
Override in subclasses that stitch together multiple services and hence need to build additional services using the configurator.
Passes the configurator and all of the service's config as keyword args.
See MirrorService for an example.
| 60 61 62 63 64 | # File 'lib/active_storage/service.rb', line 60 def build(configurator:, name:, service: nil, **service_config) #:nodoc: new(**service_config).tap do |service_instance| service_instance.name = name end end | 
.configure(service_name, configurations) ⇒ Object
Configure an Active Storage service by name from a set of configurations, typically loaded from a YAML file. The Active Storage engine uses this to set the global Active Storage service when the app boots.
| 50 51 52 | # File 'lib/active_storage/service.rb', line 50 def configure(service_name, configurations) Configurator.build(service_name, configurations) end | 
Instance Method Details
#delete(key) ⇒ Object
Delete the file at the key.
| 94 95 96 | # File 'lib/active_storage/service.rb', line 94 def delete(key) raise NotImplementedError end | 
#delete_prefixed(prefix) ⇒ Object
Delete files at keys starting with the prefix.
| 99 100 101 | # File 'lib/active_storage/service.rb', line 99 def delete_prefixed(prefix) raise NotImplementedError end | 
#download(key) ⇒ Object
Return the content of the file at the key.
| 80 81 82 | # File 'lib/active_storage/service.rb', line 80 def download(key) raise NotImplementedError end | 
#download_chunk(key, range) ⇒ Object
Return the partial content in the byte range of the file at the key.
| 85 86 87 | # File 'lib/active_storage/service.rb', line 85 def download_chunk(key, range) raise NotImplementedError end | 
#exist?(key) ⇒ Boolean
Return true if a file exists at the key.
| 104 105 106 | # File 'lib/active_storage/service.rb', line 104 def exist?(key) raise NotImplementedError end | 
#headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:) ⇒ Object
Returns a Hash of headers for url_for_direct_upload requests.
| 136 137 138 | # File 'lib/active_storage/service.rb', line 136 def headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:) {} end | 
#open(*args, **options, &block) ⇒ Object
| 89 90 91 | # File 'lib/active_storage/service.rb', line 89 def open(*args, **, &block) ActiveStorage::Downloader.new(self).open(*args, **, &block) end | 
#public? ⇒ Boolean
| 140 141 142 | # File 'lib/active_storage/service.rb', line 140 def public? @public end | 
#update_metadata(key, **metadata) ⇒ Object
Update metadata for the file identified by key in the service. Override in subclasses only if the service needs to store specific metadata that has to be updated upon identification.
| 76 77 | # File 'lib/active_storage/service.rb', line 76 def (key, **) end | 
#upload(key, io, checksum: nil, **options) ⇒ Object
Upload the io to the key specified. If a checksum is provided, the service will ensure a match when the upload has completed or raise an ActiveStorage::IntegrityError.
| 69 70 71 | # File 'lib/active_storage/service.rb', line 69 def upload(key, io, checksum: nil, **) raise NotImplementedError end | 
#url(key, **options) ⇒ Object
Returns the URL for the file at the key. This returns a permanent URL for public files, and returns a short-lived URL for private files. For private files you can provide the disposition (:inline or :attachment), filename, and content_type that you wish the file to be served with on request. Additionally, you can also provide the amount of seconds the URL will be valid for, specified in expires_in.
| 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | # File 'lib/active_storage/service.rb', line 112 def url(key, **) instrument :url, key: key do |payload| generated_url = if public? public_url(key, **) else private_url(key, **) end payload[:url] = generated_url generated_url end end | 
#url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) ⇒ Object
Returns a signed, temporary URL that a direct upload file can be PUT to on the key. The URL will be valid for the amount of seconds specified in expires_in. You must also provide the content_type, content_length, and checksum of the file that will be uploaded. All these attributes will be validated by the service upon upload.
| 131 132 133 | # File 'lib/active_storage/service.rb', line 131 def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) raise NotImplementedError end |