diff options
Diffstat (limited to 'lib/active_storage')
-rw-r--r-- | lib/active_storage/blob.rb | 16 | ||||
-rw-r--r-- | lib/active_storage/config/sites.yml | 12 | ||||
-rw-r--r-- | lib/active_storage/service.rb (renamed from lib/active_storage/site.rb) | 12 | ||||
-rw-r--r-- | lib/active_storage/service/disk_service.rb (renamed from lib/active_storage/site/disk_site.rb) | 2 | ||||
-rw-r--r-- | lib/active_storage/service/gcs_service.rb (renamed from lib/active_storage/site/gcs_site.rb) | 2 | ||||
-rw-r--r-- | lib/active_storage/service/mirror_service.rb | 51 | ||||
-rw-r--r-- | lib/active_storage/service/s3_service.rb (renamed from lib/active_storage/site/s3_site.rb) | 2 | ||||
-rw-r--r-- | lib/active_storage/site/mirror_site.rb | 51 |
8 files changed, 74 insertions, 74 deletions
diff --git a/lib/active_storage/blob.rb b/lib/active_storage/blob.rb index edf57b5c78..4ce344e2a1 100644 --- a/lib/active_storage/blob.rb +++ b/lib/active_storage/blob.rb @@ -1,4 +1,4 @@ -require "active_storage/site" +require "active_storage/service" require "active_storage/filename" require "active_storage/purge_job" @@ -9,7 +9,7 @@ class ActiveStorage::Blob < ActiveRecord::Base has_secure_token :key store :metadata, coder: JSON - class_attribute :site + class_attribute :service class << self def build_after_upload(io:, filename:, content_type: nil, metadata: nil) @@ -37,24 +37,24 @@ class ActiveStorage::Blob < ActiveRecord::Base end def url(expires_in: 5.minutes, disposition: :inline) - site.url key, expires_in: expires_in, disposition: disposition, filename: filename + service.url key, expires_in: expires_in, disposition: disposition, filename: filename end def upload(io) - site.upload(key, io) + service.upload(key, io) - self.checksum = site.checksum(key) - self.byte_size = site.byte_size(key) + self.checksum = service.checksum(key) + self.byte_size = service.byte_size(key) end def download - site.download key + service.download key end def delete - site.delete key + service.delete key end def purge diff --git a/lib/active_storage/config/sites.yml b/lib/active_storage/config/sites.yml index 43bc77fbf9..317ef2b9b7 100644 --- a/lib/active_storage/config/sites.yml +++ b/lib/active_storage/config/sites.yml @@ -1,25 +1,25 @@ # Configuration should be something like this: # # config/environments/development.rb -# config.active_storage.site = :local +# config.active_storage.service = :local # # config/environments/production.rb -# config.active_storage.site = :amazon +# config.active_storage.service = :amazon local: - site: Disk + service: Disk root: <%%= File.join(Dir.tmpdir, "active_storage") %> amazon: - site: S3 + service: S3 access_key_id: <%%= Rails.application.secrets.aws[:access_key_id] %> secret_access_key: <%%= Rails.application.secrets.aws[:secret_access_key] %> region: us-east-1 bucket: <%= Rails.application.class.name.remove(/::Application$/).underscore %> google: - site: GCS + service: GCS mirror: - site: Mirror + service: Mirror primary: amazon secondaries: google diff --git a/lib/active_storage/site.rb b/lib/active_storage/service.rb index b3b0221c63..038b6ccb53 100644 --- a/lib/active_storage/site.rb +++ b/lib/active_storage/service.rb @@ -1,11 +1,11 @@ -# Abstract class serving as an interface for concrete sites. -class ActiveStorage::Site - def self.configure(site, **options) +# Abstract class serving as an interface for concrete services. +class ActiveStorage::Service + def self.configure(service, **options) begin - require "active_storage/site/#{site.to_s.downcase}_site" - ActiveStorage::Site.const_get(:"#{site}Site").new(**options) + require "active_storage/service/#{service.to_s.downcase}_service" + ActiveStorage::Service.const_get(:"#{service}Service").new(**options) rescue LoadError => e - puts "Couldn't configure site: #{site} (#{e.message})" + puts "Couldn't configure service: #{service} (#{e.message})" end end diff --git a/lib/active_storage/site/disk_site.rb b/lib/active_storage/service/disk_service.rb index 2ff0b22fae..6977b5b82e 100644 --- a/lib/active_storage/site/disk_site.rb +++ b/lib/active_storage/service/disk_service.rb @@ -1,7 +1,7 @@ require "fileutils" require "pathname" -class ActiveStorage::Site::DiskSite < ActiveStorage::Site +class ActiveStorage::Service::DiskService < ActiveStorage::Service attr_reader :root def initialize(root:) diff --git a/lib/active_storage/site/gcs_site.rb b/lib/active_storage/service/gcs_service.rb index bf681ca6a2..18ec1de133 100644 --- a/lib/active_storage/site/gcs_site.rb +++ b/lib/active_storage/service/gcs_service.rb @@ -1,7 +1,7 @@ require "google/cloud/storage" require "active_support/core_ext/object/to_query" -class ActiveStorage::Site::GCSSite < ActiveStorage::Site +class ActiveStorage::Service::GCSService < ActiveStorage::Service attr_reader :client, :bucket def initialize(project:, keyfile:, bucket:) diff --git a/lib/active_storage/service/mirror_service.rb b/lib/active_storage/service/mirror_service.rb new file mode 100644 index 0000000000..2a3518e59e --- /dev/null +++ b/lib/active_storage/service/mirror_service.rb @@ -0,0 +1,51 @@ +class ActiveStorage::Service::MirrorService < ActiveStorage::Service + attr_reader :services + + def initialize(services:) + @services = services + end + + def upload(key, io) + services.collect do |service| + service.upload key, io + io.rewind + end + end + + def download(key) + services.detect { |service| service.exist?(key) }.download(key) + end + + def delete(key) + perform_across_services :delete, key + end + + def exist?(key) + perform_across_services(:exist?, key).any? + end + + + def url(key, **options) + primary_service.url(key, **options) + end + + def byte_size(key) + primary_service.byte_size(key) + end + + def checksum(key) + primary_service.checksum(key) + end + + private + def primary_service + services.first + end + + def perform_across_services(method, *args) + # FIXME: Convert to be threaded + services.collect do |service| + service.public_send method, *args + end + end +end diff --git a/lib/active_storage/site/s3_site.rb b/lib/active_storage/service/s3_service.rb index 65dad37cfe..811321a172 100644 --- a/lib/active_storage/site/s3_site.rb +++ b/lib/active_storage/service/s3_service.rb @@ -1,6 +1,6 @@ require "aws-sdk" -class ActiveStorage::Site::S3Site < ActiveStorage::Site +class ActiveStorage::Service::S3Service < ActiveStorage::Service attr_reader :client, :bucket def initialize(access_key_id:, secret_access_key:, region:, bucket:) diff --git a/lib/active_storage/site/mirror_site.rb b/lib/active_storage/site/mirror_site.rb deleted file mode 100644 index ba3ef0ef0e..0000000000 --- a/lib/active_storage/site/mirror_site.rb +++ /dev/null @@ -1,51 +0,0 @@ -class ActiveStorage::Site::MirrorSite < ActiveStorage::Site - attr_reader :sites - - def initialize(sites:) - @sites = sites - end - - def upload(key, io) - sites.collect do |site| - site.upload key, io - io.rewind - end - end - - def download(key) - sites.detect { |site| site.exist?(key) }.download(key) - end - - def delete(key) - perform_across_sites :delete, key - end - - def exist?(key) - perform_across_sites(:exist?, key).any? - end - - - def url(key, **options) - primary_site.url(key, **options) - end - - def byte_size(key) - primary_site.byte_size(key) - end - - def checksum(key) - primary_site.checksum(key) - end - - private - def primary_site - sites.first - end - - def perform_across_sites(method, *args) - # FIXME: Convert to be threaded - sites.collect do |site| - site.public_send method, *args - end - end -end |