From c624df326a4ef36919a5195a3c5509fab97dcba3 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 6 Jul 2017 11:33:29 +0200 Subject: [PATCH] ActiveVault -> ActiveStorage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Yaroslav agreed to hand over the gem name ❤️ --- Gemfile.lock | 4 +-- README.md | 4 +-- activevault.gemspec => activestorage.gemspec | 4 +-- lib/{active_vault.rb => active_storage.rb} | 4 +-- .../attached.rb | 18 ++++++------- lib/active_storage/attached/macros.rb | 23 ++++++++++++++++ .../attached/many.rb | 6 ++--- .../attached/one.rb | 6 ++--- .../attachment.rb | 10 +++---- lib/{active_vault => active_storage}/blob.rb | 14 +++++----- .../config/sites.yml | 6 ++--- .../disk_controller.rb | 10 +++---- .../download.rb | 2 +- .../filename.rb | 2 +- .../migration.rb | 6 ++--- .../purge_job.rb | 4 +-- lib/active_storage/railtie.rb | 27 +++++++++++++++++++ lib/{active_vault => active_storage}/site.rb | 6 ++--- .../site/disk_site.rb | 4 +-- .../site/gcs_site.rb | 2 +- .../site/mirror_site.rb | 2 +- .../site/s3_site.rb | 2 +- .../verified_key_with_expiration.rb | 4 +-- lib/active_vault/attached/macros.rb | 23 ---------------- lib/active_vault/railtie.rb | 27 ------------------- test/attachments_test.rb | 24 ++++++++--------- test/blob_test.rb | 6 ++--- test/database/create_users_migration.rb | 2 +- test/database/setup.rb | 6 ++--- test/disk_controller_test.rb | 14 +++++----- test/filename_test.rb | 12 ++++----- test/site/disk_site_test.rb | 6 ++--- test/site/gcs_site_test.rb | 6 ++--- test/site/mirror_site_test.rb | 19 +++++-------- test/site/s3_site_test.rb | 6 ++--- test/site/shared_site_tests.rb | 2 +- test/test_helper.rb | 18 ++++++------- test/verified_key_with_expiration_test.rb | 12 ++++----- 38 files changed, 173 insertions(+), 180 deletions(-) rename activevault.gemspec => activestorage.gemspec (86%) rename lib/{active_vault.rb => active_storage.rb} (57%) rename lib/{active_vault => active_storage}/attached.rb (59%) create mode 100644 lib/active_storage/attached/macros.rb rename lib/{active_vault => active_storage}/attached/many.rb (61%) rename lib/{active_vault => active_storage}/attached/one.rb (53%) rename lib/{active_vault => active_storage}/attachment.rb (62%) rename lib/{active_vault => active_storage}/blob.rb (81%) rename lib/{active_vault => active_storage}/config/sites.yml (78%) rename lib/{active_vault => active_storage}/disk_controller.rb (64%) rename lib/{active_vault => active_storage}/download.rb (98%) rename lib/{active_vault => active_storage}/filename.rb (94%) rename lib/{active_vault => active_storage}/migration.rb (75%) rename lib/{active_vault => active_storage}/purge_job.rb (54%) create mode 100644 lib/active_storage/railtie.rb rename lib/{active_vault => active_storage}/site.rb (80%) rename lib/{active_vault => active_storage}/site/disk_site.rb (89%) rename lib/{active_vault => active_storage}/site/gcs_site.rb (94%) rename lib/{active_vault => active_storage}/site/mirror_site.rb (93%) rename lib/{active_vault => active_storage}/site/s3_site.rb (96%) rename lib/{active_vault => active_storage}/verified_key_with_expiration.rb (84%) delete mode 100644 lib/active_vault/attached/macros.rb delete mode 100644 lib/active_vault/railtie.rb diff --git a/Gemfile.lock b/Gemfile.lock index e20ba22218..afef3518aa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - activevault (0.1) + activestorage (0.1) actionpack (>= 5.1) activejob (>= 5.1) activerecord (>= 5.1) @@ -223,7 +223,7 @@ PLATFORMS ruby DEPENDENCIES - activevault! + activestorage! aws-sdk bundler (~> 1.15) byebug diff --git a/README.md b/README.md index 97101c6099..8803cd9f3b 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ user.avatar.exist? # => true user.avatar.purge user.avatar.exist? # => false -user.image.url(expires_in: 5.minutes) # => /rails/blobs/ +user.avatar.url(expires_in: 5.minutes) # => /rails/blobs/ class AvatarsController < ApplicationController def update @@ -55,7 +55,7 @@ end ## Configuration -Add `require "active_vault"` to config/application.rb and create a `config/initializers/active_vault_sites.rb` with the following: +Add `require "active_storage"` to config/application.rb and create a `config/initializers/active_storage_sites.rb` with the following: ```ruby diff --git a/activevault.gemspec b/activestorage.gemspec similarity index 86% rename from activevault.gemspec rename to activestorage.gemspec index 7144563d18..4670bd1502 100644 --- a/activevault.gemspec +++ b/activestorage.gemspec @@ -1,10 +1,10 @@ Gem::Specification.new do |s| - s.name = "activevault" + s.name = "activestorage" s.version = "0.1" s.authors = "David Heinemeier Hansson" s.email = "david@basecamp.com" s.summary = "Store files in Rails applications" - s.homepage = "https://github.com/rails/activevault" + s.homepage = "https://github.com/rails/activestorage" s.license = "MIT" s.required_ruby_version = ">= 1.9.3" diff --git a/lib/active_vault.rb b/lib/active_storage.rb similarity index 57% rename from lib/active_vault.rb rename to lib/active_storage.rb index f47b09b4cd..e87eb8a506 100644 --- a/lib/active_vault.rb +++ b/lib/active_storage.rb @@ -1,7 +1,7 @@ require "active_record" -require "active_vault/railtie" if defined?(Rails) +require "active_storage/railtie" if defined?(Rails) -module ActiveVault +module ActiveStorage extend ActiveSupport::Autoload autoload :Blob diff --git a/lib/active_vault/attached.rb b/lib/active_storage/attached.rb similarity index 59% rename from lib/active_vault/attached.rb rename to lib/active_storage/attached.rb index a968f3500d..7475c38999 100644 --- a/lib/active_vault/attached.rb +++ b/lib/active_storage/attached.rb @@ -1,10 +1,10 @@ -require "active_vault/blob" -require "active_vault/attachment" +require "active_storage/blob" +require "active_storage/attachment" require "action_dispatch/http/upload" require "active_support/core_ext/module/delegation" -class ActiveVault::Attached +class ActiveStorage::Attached attr_reader :name, :record def initialize(name, record) @@ -14,21 +14,21 @@ def initialize(name, record) private def create_blob_from(attachable) case attachable - when ActiveVault::Blob + when ActiveStorage::Blob attachable when ActionDispatch::Http::UploadedFile - ActiveVault::Blob.create_after_upload! \ + ActiveStorage::Blob.create_after_upload! \ io: attachable.open, filename: attachable.original_filename, content_type: attachable.content_type when Hash - ActiveVault::Blob.create_after_upload!(attachable) + ActiveStorage::Blob.create_after_upload!(attachable) else nil end end end -require "active_vault/attached/one" -require "active_vault/attached/many" -require "active_vault/attached/macros" +require "active_storage/attached/one" +require "active_storage/attached/many" +require "active_storage/attached/macros" diff --git a/lib/active_storage/attached/macros.rb b/lib/active_storage/attached/macros.rb new file mode 100644 index 0000000000..96493d1215 --- /dev/null +++ b/lib/active_storage/attached/macros.rb @@ -0,0 +1,23 @@ +module ActiveStorage::Attached::Macros + def has_one_attached(name, dependent: :purge_later) + define_method(name) do + instance_variable_get("@active_storage_attached_#{name}") || + instance_variable_set("@active_storage_attached_#{name}", ActiveStorage::Attached::One.new(name, self)) + end + + if dependent == :purge_later + before_destroy { public_send(name).purge_later } + end + end + + def has_many_attached(name, dependent: :purge_later) + define_method(name) do + instance_variable_get("@active_storage_attached_#{name}") || + instance_variable_set("@active_storage_attached_#{name}", ActiveStorage::Attached::Many.new(name, self)) + end + + if dependent == :purge_later + before_destroy { public_send(name).purge_later } + end + end +end diff --git a/lib/active_vault/attached/many.rb b/lib/active_storage/attached/many.rb similarity index 61% rename from lib/active_vault/attached/many.rb rename to lib/active_storage/attached/many.rb index 6f79a1c555..f1535dfbc6 100644 --- a/lib/active_vault/attached/many.rb +++ b/lib/active_storage/attached/many.rb @@ -1,13 +1,13 @@ -class ActiveVault::Attached::Many < ActiveVault::Attached +class ActiveStorage::Attached::Many < ActiveStorage::Attached delegate_missing_to :attachments def attachments - @attachments ||= ActiveVault::Attachment.where(record_gid: record.to_gid.to_s, name: name) + @attachments ||= ActiveStorage::Attachment.where(record_gid: record.to_gid.to_s, name: name) end def attach(*attachables) @attachments = attachments | Array(attachables).flatten.collect do |attachable| - ActiveVault::Attachment.create!(record_gid: record.to_gid.to_s, name: name, blob: create_blob_from(attachable)) + ActiveStorage::Attachment.create!(record_gid: record.to_gid.to_s, name: name, blob: create_blob_from(attachable)) end end diff --git a/lib/active_vault/attached/one.rb b/lib/active_storage/attached/one.rb similarity index 53% rename from lib/active_vault/attached/one.rb rename to lib/active_storage/attached/one.rb index 01a5d0d6f0..d08d265992 100644 --- a/lib/active_vault/attached/one.rb +++ b/lib/active_storage/attached/one.rb @@ -1,12 +1,12 @@ -class ActiveVault::Attached::One < ActiveVault::Attached +class ActiveStorage::Attached::One < ActiveStorage::Attached delegate_missing_to :attachment def attachment - @attachment ||= ActiveVault::Attachment.find_by(record_gid: record.to_gid.to_s, name: name) + @attachment ||= ActiveStorage::Attachment.find_by(record_gid: record.to_gid.to_s, name: name) end def attach(attachable) - @attachment = ActiveVault::Attachment.create!(record_gid: record.to_gid.to_s, name: name, blob: create_blob_from(attachable)) + @attachment = ActiveStorage::Attachment.create!(record_gid: record.to_gid.to_s, name: name, blob: create_blob_from(attachable)) end def attached? diff --git a/lib/active_vault/attachment.rb b/lib/active_storage/attachment.rb similarity index 62% rename from lib/active_vault/attachment.rb rename to lib/active_storage/attachment.rb index 549a734d68..20c619aa5a 100644 --- a/lib/active_vault/attachment.rb +++ b/lib/active_storage/attachment.rb @@ -1,12 +1,12 @@ -require "active_vault/blob" +require "active_storage/blob" require "global_id" require "active_support/core_ext/module/delegation" # Schema: id, record_gid, blob_id, created_at -class ActiveVault::Attachment < ActiveRecord::Base - self.table_name = "active_vault_attachments" +class ActiveStorage::Attachment < ActiveRecord::Base + self.table_name = "active_storage_attachments" - belongs_to :blob, class_name: "ActiveVault::Blob" + belongs_to :blob, class_name: "ActiveStorage::Blob" delegate_missing_to :blob @@ -25,6 +25,6 @@ def purge end def purge_later - ActiveVault::PurgeJob.perform_later(self) + ActiveStorage::PurgeJob.perform_later(self) end end diff --git a/lib/active_vault/blob.rb b/lib/active_storage/blob.rb similarity index 81% rename from lib/active_vault/blob.rb rename to lib/active_storage/blob.rb index a232ca5c1a..edf57b5c78 100644 --- a/lib/active_vault/blob.rb +++ b/lib/active_storage/blob.rb @@ -1,10 +1,10 @@ -require "active_vault/site" -require "active_vault/filename" -require "active_vault/purge_job" +require "active_storage/site" +require "active_storage/filename" +require "active_storage/purge_job" # Schema: id, key, filename, content_type, metadata, byte_size, checksum, created_at -class ActiveVault::Blob < ActiveRecord::Base - self.table_name = "active_vault_blobs" +class ActiveStorage::Blob < ActiveRecord::Base + self.table_name = "active_storage_blobs" has_secure_token :key store :metadata, coder: JSON @@ -33,7 +33,7 @@ def key end def filename - ActiveVault::Filename.new(self[:filename]) + ActiveStorage::Filename.new(self[:filename]) end def url(expires_in: 5.minutes, disposition: :inline) @@ -63,6 +63,6 @@ def purge end def purge_later - ActiveVault::PurgeJob.perform_later(self) + ActiveStorage::PurgeJob.perform_later(self) end end diff --git a/lib/active_vault/config/sites.yml b/lib/active_storage/config/sites.yml similarity index 78% rename from lib/active_vault/config/sites.yml rename to lib/active_storage/config/sites.yml index 334e779b28..43bc77fbf9 100644 --- a/lib/active_vault/config/sites.yml +++ b/lib/active_storage/config/sites.yml @@ -1,13 +1,13 @@ # Configuration should be something like this: # # config/environments/development.rb -# config.active_vault.site = :local +# config.active_storage.site = :local # # config/environments/production.rb -# config.active_vault.site = :amazon +# config.active_storage.site = :amazon local: site: Disk - root: <%%= File.join(Dir.tmpdir, "active_vault") %> + root: <%%= File.join(Dir.tmpdir, "active_storage") %> amazon: site: S3 diff --git a/lib/active_vault/disk_controller.rb b/lib/active_storage/disk_controller.rb similarity index 64% rename from lib/active_vault/disk_controller.rb rename to lib/active_storage/disk_controller.rb index 623569f0f6..3eba86c213 100644 --- a/lib/active_vault/disk_controller.rb +++ b/lib/active_storage/disk_controller.rb @@ -1,13 +1,13 @@ require "action_controller" -require "active_vault/blob" -require "active_vault/verified_key_with_expiration" +require "active_storage/blob" +require "active_storage/verified_key_with_expiration" require "active_support/core_ext/object/inclusion" -class ActiveVault::DiskController < ActionController::Base +class ActiveStorage::DiskController < ActionController::Base def show if key = decode_verified_key - blob = ActiveVault::Blob.find_by!(key: key) + blob = ActiveStorage::Blob.find_by!(key: key) if stale?(etag: blob.checksum) send_data blob.download, filename: blob.filename, type: blob.content_type, disposition: disposition_param @@ -19,7 +19,7 @@ def show private def decode_verified_key - ActiveVault::VerifiedKeyWithExpiration.decode(params[:encoded_key]) + ActiveStorage::VerifiedKeyWithExpiration.decode(params[:encoded_key]) end def disposition_param diff --git a/lib/active_vault/download.rb b/lib/active_storage/download.rb similarity index 98% rename from lib/active_vault/download.rb rename to lib/active_storage/download.rb index 6e74056062..4d656942d8 100644 --- a/lib/active_vault/download.rb +++ b/lib/active_storage/download.rb @@ -1,4 +1,4 @@ -class ActiveVault::Download +class ActiveStorage::Download # Sending .ai files as application/postscript to Safari opens them in a blank, grey screen. # Downloading .ai as application/postscript files in Safari appends .ps to the extension. # Sending HTML, SVG, XML and SWF files as binary closes XSS vulnerabilities. diff --git a/lib/active_vault/filename.rb b/lib/active_storage/filename.rb similarity index 94% rename from lib/active_vault/filename.rb rename to lib/active_storage/filename.rb index 647d037b1f..71614b5113 100644 --- a/lib/active_vault/filename.rb +++ b/lib/active_storage/filename.rb @@ -1,4 +1,4 @@ -class ActiveVault::Filename +class ActiveStorage::Filename include Comparable def initialize(filename) diff --git a/lib/active_vault/migration.rb b/lib/active_storage/migration.rb similarity index 75% rename from lib/active_vault/migration.rb rename to lib/active_storage/migration.rb index 985d26d1b9..c0400abe3b 100644 --- a/lib/active_vault/migration.rb +++ b/lib/active_storage/migration.rb @@ -1,6 +1,6 @@ -class ActiveVault::CreateTables < ActiveRecord::Migration[5.1] +class ActiveStorage::CreateTables < ActiveRecord::Migration[5.1] def change - create_table :active_vault_blobs do |t| + create_table :active_storage_blobs do |t| t.string :key t.string :filename t.string :content_type @@ -12,7 +12,7 @@ def change t.index [ :key ], unique: true end - create_table :active_vault_attachments do |t| + create_table :active_storage_attachments do |t| t.string :name t.string :record_gid t.integer :blob_id diff --git a/lib/active_vault/purge_job.rb b/lib/active_storage/purge_job.rb similarity index 54% rename from lib/active_vault/purge_job.rb rename to lib/active_storage/purge_job.rb index b68eb370bb..b59d3687f8 100644 --- a/lib/active_vault/purge_job.rb +++ b/lib/active_storage/purge_job.rb @@ -1,7 +1,7 @@ require "active_job" -class ActiveVault::PurgeJob < ActiveJob::Base - # FIXME: Limit this to a custom ActiveVault error +class ActiveStorage::PurgeJob < ActiveJob::Base + # FIXME: Limit this to a custom ActiveStorage error retry_on StandardError def perform(attachment_or_blob) diff --git a/lib/active_storage/railtie.rb b/lib/active_storage/railtie.rb new file mode 100644 index 0000000000..bf38d5aff5 --- /dev/null +++ b/lib/active_storage/railtie.rb @@ -0,0 +1,27 @@ +require "rails/railtie" + +module ActiveStorage + class Railtie < Rails::Railtie # :nodoc: + config.active_storage = ActiveSupport::OrderedOptions.new + + config.eager_load_namespaces << ActiveStorage + + initializer "active_storage.routes" do + require "active_storage/disk_controller" + + config.after_initialize do |app| + app.routes.prepend do + get "/rails/blobs/:encoded_key" => "active_storage/disk#show", as: :rails_disk_blob + end + end + end + + initializer "active_storage.attached" do + require "active_storage/attached" + + ActiveSupport.on_load(:active_record) do + extend ActiveStorage::Attached::Macros + end + end + end +end diff --git a/lib/active_vault/site.rb b/lib/active_storage/site.rb similarity index 80% rename from lib/active_vault/site.rb rename to lib/active_storage/site.rb index 29eddf1566..b3b0221c63 100644 --- a/lib/active_vault/site.rb +++ b/lib/active_storage/site.rb @@ -1,9 +1,9 @@ # Abstract class serving as an interface for concrete sites. -class ActiveVault::Site +class ActiveStorage::Site def self.configure(site, **options) begin - require "active_vault/site/#{site.to_s.downcase}_site" - ActiveVault::Site.const_get(:"#{site}Site").new(**options) + require "active_storage/site/#{site.to_s.downcase}_site" + ActiveStorage::Site.const_get(:"#{site}Site").new(**options) rescue LoadError => e puts "Couldn't configure site: #{site} (#{e.message})" end diff --git a/lib/active_vault/site/disk_site.rb b/lib/active_storage/site/disk_site.rb similarity index 89% rename from lib/active_vault/site/disk_site.rb rename to lib/active_storage/site/disk_site.rb index 73f86bac6a..2ff0b22fae 100644 --- a/lib/active_vault/site/disk_site.rb +++ b/lib/active_storage/site/disk_site.rb @@ -1,7 +1,7 @@ require "fileutils" require "pathname" -class ActiveVault::Site::DiskSite < ActiveVault::Site +class ActiveStorage::Site::DiskSite < ActiveStorage::Site attr_reader :root def initialize(root:) @@ -38,7 +38,7 @@ def exist?(key) def url(key, expires_in:, disposition:, filename:) - verified_key_with_expiration = ActiveVault::VerifiedKeyWithExpiration.encode(key, expires_in: expires_in) + verified_key_with_expiration = ActiveStorage::VerifiedKeyWithExpiration.encode(key, expires_in: expires_in) if defined?(Rails) && defined?(Rails.application) Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration, disposition: disposition) diff --git a/lib/active_vault/site/gcs_site.rb b/lib/active_storage/site/gcs_site.rb similarity index 94% rename from lib/active_vault/site/gcs_site.rb rename to lib/active_storage/site/gcs_site.rb index 8f51d486ec..bf681ca6a2 100644 --- a/lib/active_vault/site/gcs_site.rb +++ b/lib/active_storage/site/gcs_site.rb @@ -1,7 +1,7 @@ require "google/cloud/storage" require "active_support/core_ext/object/to_query" -class ActiveVault::Site::GCSSite < ActiveVault::Site +class ActiveStorage::Site::GCSSite < ActiveStorage::Site attr_reader :client, :bucket def initialize(project:, keyfile:, bucket:) diff --git a/lib/active_vault/site/mirror_site.rb b/lib/active_storage/site/mirror_site.rb similarity index 93% rename from lib/active_vault/site/mirror_site.rb rename to lib/active_storage/site/mirror_site.rb index 8a2fa52fcb..ba3ef0ef0e 100644 --- a/lib/active_vault/site/mirror_site.rb +++ b/lib/active_storage/site/mirror_site.rb @@ -1,4 +1,4 @@ -class ActiveVault::Site::MirrorSite < ActiveVault::Site +class ActiveStorage::Site::MirrorSite < ActiveStorage::Site attr_reader :sites def initialize(sites:) diff --git a/lib/active_vault/site/s3_site.rb b/lib/active_storage/site/s3_site.rb similarity index 96% rename from lib/active_vault/site/s3_site.rb rename to lib/active_storage/site/s3_site.rb index 49a7522170..65dad37cfe 100644 --- a/lib/active_vault/site/s3_site.rb +++ b/lib/active_storage/site/s3_site.rb @@ -1,6 +1,6 @@ require "aws-sdk" -class ActiveVault::Site::S3Site < ActiveVault::Site +class ActiveStorage::Site::S3Site < ActiveStorage::Site attr_reader :client, :bucket def initialize(access_key_id:, secret_access_key:, region:, bucket:) diff --git a/lib/active_vault/verified_key_with_expiration.rb b/lib/active_storage/verified_key_with_expiration.rb similarity index 84% rename from lib/active_vault/verified_key_with_expiration.rb rename to lib/active_storage/verified_key_with_expiration.rb index 95d4993ff0..8708106735 100644 --- a/lib/active_vault/verified_key_with_expiration.rb +++ b/lib/active_storage/verified_key_with_expiration.rb @@ -1,5 +1,5 @@ -class ActiveVault::VerifiedKeyWithExpiration - class_attribute :verifier, default: defined?(Rails) ? Rails.application.message_verifier('ActiveVault') : nil +class ActiveStorage::VerifiedKeyWithExpiration + class_attribute :verifier, default: defined?(Rails) ? Rails.application.message_verifier('ActiveStorage') : nil class << self def encode(key, expires_in: nil) diff --git a/lib/active_vault/attached/macros.rb b/lib/active_vault/attached/macros.rb deleted file mode 100644 index 1b95c14c9c..0000000000 --- a/lib/active_vault/attached/macros.rb +++ /dev/null @@ -1,23 +0,0 @@ -module ActiveVault::Attached::Macros - def has_one_attached(name, dependent: :purge_later) - define_method(name) do - instance_variable_get("@active_vault_attached_#{name}") || - instance_variable_set("@active_vault_attached_#{name}", ActiveVault::Attached::One.new(name, self)) - end - - if dependent == :purge_later - before_destroy { public_send(name).purge_later } - end - end - - def has_many_attached(name, dependent: :purge_later) - define_method(name) do - instance_variable_get("@active_vault_attached_#{name}") || - instance_variable_set("@active_vault_attached_#{name}", ActiveVault::Attached::Many.new(name, self)) - end - - if dependent == :purge_later - before_destroy { public_send(name).purge_later } - end - end -end diff --git a/lib/active_vault/railtie.rb b/lib/active_vault/railtie.rb deleted file mode 100644 index 1830780001..0000000000 --- a/lib/active_vault/railtie.rb +++ /dev/null @@ -1,27 +0,0 @@ -require "rails/railtie" - -module ActiveVault - class Railtie < Rails::Railtie # :nodoc: - config.active_vault = ActiveSupport::OrderedOptions.new - - config.eager_load_namespaces << ActiveVault - - initializer "active_vault.routes" do - require "active_vault/disk_controller" - - config.after_initialize do |app| - app.routes.prepend do - get "/rails/blobs/:encoded_key" => "active_vault/disk#show", as: :rails_disk_blob - end - end - end - - initializer "active_vault.attached" do - require "active_vault/attached" - - ActiveSupport.on_load(:active_record) do - extend ActiveVault::Attached::Macros - end - end - end -end diff --git a/test/attachments_test.rb b/test/attachments_test.rb index 1b784b50c1..6e25002bb1 100644 --- a/test/attachments_test.rb +++ b/test/attachments_test.rb @@ -1,6 +1,6 @@ require "test_helper" require "database/setup" -require "active_vault/blob" +require "active_storage/blob" require "active_job" ActiveJob::Base.queue_adapter = :test @@ -13,12 +13,12 @@ class User < ActiveRecord::Base has_many_attached :highlights end -class ActiveVault::AttachmentsTest < ActiveSupport::TestCase +class ActiveStorage::AttachmentsTest < ActiveSupport::TestCase include ActiveJob::TestHelper setup { @user = User.create!(name: "DHH") } - teardown { ActiveVault::Blob.all.each(&:purge) } + teardown { ActiveStorage::Blob.all.each(&:purge) } test "attach existing blob" do @user.avatar.attach create_blob(filename: "funky.jpg") @@ -36,7 +36,7 @@ class ActiveVault::AttachmentsTest < ActiveSupport::TestCase @user.avatar.purge assert_not @user.avatar.attached? - assert_not ActiveVault::Blob.site.exist?(avatar_key) + assert_not ActiveStorage::Blob.site.exist?(avatar_key) end test "purge attached blob later when the record is destroyed" do @@ -46,8 +46,8 @@ class ActiveVault::AttachmentsTest < ActiveSupport::TestCase perform_enqueued_jobs do @user.destroy - assert_nil ActiveVault::Blob.find_by(key: avatar_key) - assert_not ActiveVault::Blob.site.exist?(avatar_key) + assert_nil ActiveStorage::Blob.find_by(key: avatar_key) + assert_not ActiveStorage::Blob.site.exist?(avatar_key) end end @@ -74,8 +74,8 @@ class ActiveVault::AttachmentsTest < ActiveSupport::TestCase @user.highlights.purge assert_not @user.highlights.attached? - assert_not ActiveVault::Blob.site.exist?(highlight_keys.first) - assert_not ActiveVault::Blob.site.exist?(highlight_keys.second) + assert_not ActiveStorage::Blob.site.exist?(highlight_keys.first) + assert_not ActiveStorage::Blob.site.exist?(highlight_keys.second) end test "purge attached blobs later when the record is destroyed" do @@ -85,11 +85,11 @@ class ActiveVault::AttachmentsTest < ActiveSupport::TestCase perform_enqueued_jobs do @user.destroy - assert_nil ActiveVault::Blob.find_by(key: highlight_keys.first) - assert_not ActiveVault::Blob.site.exist?(highlight_keys.first) + assert_nil ActiveStorage::Blob.find_by(key: highlight_keys.first) + assert_not ActiveStorage::Blob.site.exist?(highlight_keys.first) - assert_nil ActiveVault::Blob.find_by(key: highlight_keys.second) - assert_not ActiveVault::Blob.site.exist?(highlight_keys.second) + assert_nil ActiveStorage::Blob.find_by(key: highlight_keys.second) + assert_not ActiveStorage::Blob.site.exist?(highlight_keys.second) end end end diff --git a/test/blob_test.rb b/test/blob_test.rb index c7b4aeed39..880c656ecc 100644 --- a/test/blob_test.rb +++ b/test/blob_test.rb @@ -1,8 +1,8 @@ require "test_helper" require "database/setup" -require "active_vault/blob" +require "active_storage/blob" -class ActiveVault::BlobTest < ActiveSupport::TestCase +class ActiveStorage::BlobTest < ActiveSupport::TestCase test "create after upload sets byte size and checksum" do data = "Hello world!" blob = create_blob data: data @@ -23,6 +23,6 @@ class ActiveVault::BlobTest < ActiveSupport::TestCase private def expected_url_for(blob, disposition: :inline) - "/rails/blobs/#{ActiveVault::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}?disposition=#{disposition}" + "/rails/blobs/#{ActiveStorage::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}?disposition=#{disposition}" end end diff --git a/test/database/create_users_migration.rb b/test/database/create_users_migration.rb index 38dcdc129b..15be1938a9 100644 --- a/test/database/create_users_migration.rb +++ b/test/database/create_users_migration.rb @@ -1,4 +1,4 @@ -class ActiveVault::CreateUsers < ActiveRecord::Migration[5.1] +class ActiveStorage::CreateUsers < ActiveRecord::Migration[5.1] def change create_table :users do |t| t.string :name diff --git a/test/database/setup.rb b/test/database/setup.rb index 7373d72237..828edd86dd 100644 --- a/test/database/setup.rb +++ b/test/database/setup.rb @@ -1,6 +1,6 @@ -require "active_vault/migration" +require "active_storage/migration" require_relative "create_users_migration" ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') -ActiveVault::CreateTables.migrate(:up) -ActiveVault::CreateUsers.migrate(:up) +ActiveStorage::CreateTables.migrate(:up) +ActiveStorage::CreateUsers.migrate(:up) diff --git a/test/disk_controller_test.rb b/test/disk_controller_test.rb index eaf0b497ac..3d7f4ba6bd 100644 --- a/test/disk_controller_test.rb +++ b/test/disk_controller_test.rb @@ -4,30 +4,30 @@ require "action_controller" require "action_controller/test_case" -require "active_vault/disk_controller" -require "active_vault/verified_key_with_expiration" +require "active_storage/disk_controller" +require "active_storage/verified_key_with_expiration" -class ActiveVault::DiskControllerTest < ActionController::TestCase +class ActiveStorage::DiskControllerTest < ActionController::TestCase Routes = ActionDispatch::Routing::RouteSet.new.tap do |routes| routes.draw do - get "/rails/blobs/:encoded_key" => "active_vault/disk#show", as: :rails_disk_blob + get "/rails/blobs/:encoded_key" => "active_storage/disk#show", as: :rails_disk_blob end end setup do @blob = create_blob @routes = Routes - @controller = ActiveVault::DiskController.new + @controller = ActiveStorage::DiskController.new end test "showing blob inline" do - get :show, params: { encoded_key: ActiveVault::VerifiedKeyWithExpiration.encode(@blob.key, expires_in: 5.minutes) } + get :show, params: { encoded_key: ActiveStorage::VerifiedKeyWithExpiration.encode(@blob.key, expires_in: 5.minutes) } assert_equal "inline; filename=\"#{@blob.filename}\"", @response.headers["Content-Disposition"] assert_equal "text/plain", @response.headers["Content-Type"] end test "sending blob as attachment" do - get :show, params: { encoded_key: ActiveVault::VerifiedKeyWithExpiration.encode(@blob.key, expires_in: 5.minutes), disposition: :attachment } + get :show, params: { encoded_key: ActiveStorage::VerifiedKeyWithExpiration.encode(@blob.key, expires_in: 5.minutes), disposition: :attachment } assert_equal "attachment; filename=\"#{@blob.filename}\"", @response.headers["Content-Disposition"] assert_equal "text/plain", @response.headers["Content-Type"] end diff --git a/test/filename_test.rb b/test/filename_test.rb index 5cb67016c0..448ba7f766 100644 --- a/test/filename_test.rb +++ b/test/filename_test.rb @@ -1,9 +1,9 @@ require "test_helper" -class ActiveVault::FilenameTest < ActiveSupport::TestCase +class ActiveStorage::FilenameTest < ActiveSupport::TestCase test "sanitize" do "%$|:;/\t\r\n\\".each_char do |character| - filename = ActiveVault::Filename.new("foo#{character}bar.pdf") + filename = ActiveStorage::Filename.new("foo#{character}bar.pdf") assert_equal 'foo-bar.pdf', filename.sanitized assert_equal 'foo-bar.pdf', filename.to_s end @@ -16,21 +16,21 @@ class ActiveVault::FilenameTest < ActiveSupport::TestCase "\xCF" => "�", "\x00" => "", }.each do |actual, expected| - assert_equal expected, ActiveVault::Filename.new(actual).sanitized + assert_equal expected, ActiveStorage::Filename.new(actual).sanitized end end test "strips RTL override chars used to spoof unsafe executables as docs" do # Would be displayed in Windows as "evilexe.pdf" due to the right-to-left # (RTL) override char! - assert_equal 'evil-fdp.exe', ActiveVault::Filename.new("evil\u{202E}fdp.exe").sanitized + assert_equal 'evil-fdp.exe', ActiveStorage::Filename.new("evil\u{202E}fdp.exe").sanitized end test "compare case-insensitively" do - assert_operator ActiveVault::Filename.new('foobar.pdf'), :==, ActiveVault::Filename.new('FooBar.PDF') + assert_operator ActiveStorage::Filename.new('foobar.pdf'), :==, ActiveStorage::Filename.new('FooBar.PDF') end test "compare sanitized" do - assert_operator ActiveVault::Filename.new('foo-bar.pdf'), :==, ActiveVault::Filename.new("foo\tbar.pdf") + assert_operator ActiveStorage::Filename.new('foo-bar.pdf'), :==, ActiveStorage::Filename.new("foo\tbar.pdf") end end diff --git a/test/site/disk_site_test.rb b/test/site/disk_site_test.rb index e9ebdcb0be..a04414ea68 100644 --- a/test/site/disk_site_test.rb +++ b/test/site/disk_site_test.rb @@ -1,8 +1,8 @@ require "tmpdir" require "site/shared_site_tests" -class ActiveVault::Site::DiskSiteTest < ActiveSupport::TestCase - SITE = ActiveVault::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_vault")) +class ActiveStorage::Site::DiskSiteTest < ActiveSupport::TestCase + SITE = ActiveStorage::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_storage")) - include ActiveVault::Site::SharedSiteTests + include ActiveStorage::Site::SharedSiteTests end diff --git a/test/site/gcs_site_test.rb b/test/site/gcs_site_test.rb index b3712a2116..98b1a3d767 100644 --- a/test/site/gcs_site_test.rb +++ b/test/site/gcs_site_test.rb @@ -1,10 +1,10 @@ require "site/shared_site_tests" if SITE_CONFIGURATIONS[:gcs] - class ActiveVault::Site::GCSSiteTest < ActiveSupport::TestCase - SITE = ActiveVault::Site.configure(:GCS, SITE_CONFIGURATIONS[:gcs]) + class ActiveStorage::Site::GCSSiteTest < ActiveSupport::TestCase + SITE = ActiveStorage::Site.configure(:GCS, SITE_CONFIGURATIONS[:gcs]) - include ActiveVault::Site::SharedSiteTests + include ActiveStorage::Site::SharedSiteTests test "signed URL generation" do travel_to Time.now do diff --git a/test/site/mirror_site_test.rb b/test/site/mirror_site_test.rb index bdb0b4c357..7ced377cde 100644 --- a/test/site/mirror_site_test.rb +++ b/test/site/mirror_site_test.rb @@ -1,15 +1,15 @@ require "tmpdir" require "site/shared_site_tests" -class ActiveVault::Site::MirrorSiteTest < ActiveSupport::TestCase - PRIMARY_DISK_SITE = ActiveVault::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_vault")) - SECONDARY_DISK_SITE = ActiveVault::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_vault_mirror")) +class ActiveStorage::Site::MirrorSiteTest < ActiveSupport::TestCase + PRIMARY_DISK_SITE = ActiveStorage::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_storage")) + SECONDARY_DISK_SITE = ActiveStorage::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_storage_mirror")) - SITE = ActiveVault::Site.configure :Mirror, sites: [ PRIMARY_DISK_SITE, SECONDARY_DISK_SITE ] + SITE = ActiveStorage::Site.configure :Mirror, sites: [ PRIMARY_DISK_SITE, SECONDARY_DISK_SITE ] - include ActiveVault::Site::SharedSiteTests + include ActiveStorage::Site::SharedSiteTests - test "uploading to all sites" do + test "uploading was done to all sites" do begin key = SecureRandom.base58(24) data = "Something else entirely!" @@ -27,11 +27,4 @@ class ActiveVault::Site::MirrorSiteTest < ActiveSupport::TestCase assert PRIMARY_DISK_SITE.exist?(FIXTURE_KEY) assert SECONDARY_DISK_SITE.exist?(FIXTURE_KEY) end - - test "URL generation for primary site" do - travel_to Time.now do - assert_equal PRIMARY_DISK_SITE.url(FIXTURE_KEY, expires_in: 5.minutes, disposition: :inline, filename: "test.txt"), - SITE.url(FIXTURE_KEY, expires_in: 5.minutes, disposition: :inline, filename: "test.txt") - end - end end diff --git a/test/site/s3_site_test.rb b/test/site/s3_site_test.rb index 6daeaac2ea..a9cb6ca618 100644 --- a/test/site/s3_site_test.rb +++ b/test/site/s3_site_test.rb @@ -1,10 +1,10 @@ require "site/shared_site_tests" if SITE_CONFIGURATIONS[:s3] - class ActiveVault::Site::S3SiteTest < ActiveSupport::TestCase - SITE = ActiveVault::Site.configure(:S3, SITE_CONFIGURATIONS[:s3]) + class ActiveStorage::Site::S3SiteTest < ActiveSupport::TestCase + SITE = ActiveStorage::Site.configure(:S3, SITE_CONFIGURATIONS[:s3]) - include ActiveVault::Site::SharedSiteTests + include ActiveStorage::Site::SharedSiteTests end else puts "Skipping S3 Site tests because no S3 configuration was supplied" diff --git a/test/site/shared_site_tests.rb b/test/site/shared_site_tests.rb index 56f1a13742..687c35e941 100644 --- a/test/site/shared_site_tests.rb +++ b/test/site/shared_site_tests.rb @@ -8,7 +8,7 @@ puts "Missing site configuration file in test/sites/configurations.yml" end -module ActiveVault::Site::SharedSiteTests +module ActiveStorage::Site::SharedSiteTests extend ActiveSupport::Concern FIXTURE_KEY = SecureRandom.base58(24) diff --git a/test/test_helper.rb b/test/test_helper.rb index b18613c365..f354a995e4 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -4,25 +4,25 @@ require "active_support/testing/autorun" require "byebug" -require "active_vault" +require "active_storage" -require "active_vault/site" -ActiveVault::Blob.site = ActiveVault::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_vault")) +require "active_storage/site" +ActiveStorage::Blob.site = ActiveStorage::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_storage")) -require "active_vault/verified_key_with_expiration" -ActiveVault::VerifiedKeyWithExpiration.verifier = ActiveSupport::MessageVerifier.new("Testing") +require "active_storage/verified_key_with_expiration" +ActiveStorage::VerifiedKeyWithExpiration.verifier = ActiveSupport::MessageVerifier.new("Testing") class ActiveSupport::TestCase private def create_blob(data: "Hello world!", filename: "hello.txt", content_type: "text/plain") - ActiveVault::Blob.create_after_upload! io: StringIO.new(data), filename: filename, content_type: content_type + ActiveStorage::Blob.create_after_upload! io: StringIO.new(data), filename: filename, content_type: content_type end end -require "active_vault/attached" -ActiveRecord::Base.send :extend, ActiveVault::Attached::Macros +require "active_storage/attached" +ActiveRecord::Base.send :extend, ActiveStorage::Attached::Macros require "global_id" -GlobalID.app = "ActiveVaultExampleApp" +GlobalID.app = "ActiveStorageExampleApp" ActiveRecord::Base.send :include, GlobalID::Identification diff --git a/test/verified_key_with_expiration_test.rb b/test/verified_key_with_expiration_test.rb index 073bb047f6..ee4dc7e02e 100644 --- a/test/verified_key_with_expiration_test.rb +++ b/test/verified_key_with_expiration_test.rb @@ -1,19 +1,19 @@ require "test_helper" require "active_support/core_ext/securerandom" -class ActiveVault::VerifiedKeyWithExpirationTest < ActiveSupport::TestCase +class ActiveStorage::VerifiedKeyWithExpirationTest < ActiveSupport::TestCase FIXTURE_KEY = SecureRandom.base58(24) test "without expiration" do - encoded_key = ActiveVault::VerifiedKeyWithExpiration.encode(FIXTURE_KEY) - assert_equal FIXTURE_KEY, ActiveVault::VerifiedKeyWithExpiration.decode(encoded_key) + encoded_key = ActiveStorage::VerifiedKeyWithExpiration.encode(FIXTURE_KEY) + assert_equal FIXTURE_KEY, ActiveStorage::VerifiedKeyWithExpiration.decode(encoded_key) end test "with expiration" do - encoded_key = ActiveVault::VerifiedKeyWithExpiration.encode(FIXTURE_KEY, expires_in: 1.minute) - assert_equal FIXTURE_KEY, ActiveVault::VerifiedKeyWithExpiration.decode(encoded_key) + encoded_key = ActiveStorage::VerifiedKeyWithExpiration.encode(FIXTURE_KEY, expires_in: 1.minute) + assert_equal FIXTURE_KEY, ActiveStorage::VerifiedKeyWithExpiration.decode(encoded_key) travel 2.minutes - assert_nil ActiveVault::VerifiedKeyWithExpiration.decode(encoded_key) + assert_nil ActiveStorage::VerifiedKeyWithExpiration.decode(encoded_key) end end