Class: ActiveStorage::Service

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

  • 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_services.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")
)

Defined Under Namespace

Classes: AzureService, Configurator, DiskService, GCSService, MirrorService, S3Service

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build(configurator:, 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.



56
57
58
# File 'lib/active_storage/service.rb', line 56

def build(configurator:, service: nil, **service_config) #:nodoc:
  new(**service_config)
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.



46
47
48
# File 'lib/active_storage/service.rb', line 46

def configure(service_name, configurations)
  Configurator.build(service_name, configurations)
end

Instance Method Details

#delete(key) ⇒ Object

Delete the file at the ‘key`.

Raises:

  • (NotImplementedError)


73
74
75
# File 'lib/active_storage/service.rb', line 73

def delete(key)
  raise NotImplementedError
end

#download(key) ⇒ Object

Return the content of the file at the ‘key`.

Raises:

  • (NotImplementedError)


68
69
70
# File 'lib/active_storage/service.rb', line 68

def download(key)
  raise NotImplementedError
end

#exist?(key) ⇒ Boolean

Return true if a file exists at the ‘key`.

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


78
79
80
# File 'lib/active_storage/service.rb', line 78

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.



98
99
100
# File 'lib/active_storage/service.rb', line 98

def headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:)
  {}
end

#upload(key, io, checksum: nil) ⇒ 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`.

Raises:

  • (NotImplementedError)


63
64
65
# File 'lib/active_storage/service.rb', line 63

def upload(key, io, checksum: nil)
  raise NotImplementedError
end

#url(key, expires_in:, disposition:, filename:, content_type:) ⇒ Object

Returns a signed, temporary URL for the file at the ‘key`. The URL will be valid for the amount of seconds specified in `expires_in`. You most also provide the `disposition` (`:inline` or `:attachment`), `filename`, and `content_type` that you wish the file to be served with on request.

Raises:

  • (NotImplementedError)


85
86
87
# File 'lib/active_storage/service.rb', line 85

def url(key, expires_in:, disposition:, filename:, content_type:)
  raise NotImplementedError
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 most 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.

Raises:

  • (NotImplementedError)


93
94
95
# File 'lib/active_storage/service.rb', line 93

def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:)
  raise NotImplementedError
end