aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2019-03-31 07:46:18 -0400
committerGeorge Claghorn <george@basecamp.com>2019-03-31 07:46:18 -0400
commit002684e36e813469c3585e193f0698784c88278b (patch)
tree1c916600c4fb69445fe382d7a115627a2456386a /activestorage
parent51ab5cb0432c483422112ebbb274855a3fa5ecc8 (diff)
downloadrails-002684e36e813469c3585e193f0698784c88278b.tar.gz
rails-002684e36e813469c3585e193f0698784c88278b.tar.bz2
rails-002684e36e813469c3585e193f0698784c88278b.zip
Add ActiveStorage.service_configurations and ActiveStorage.service
* Allow plugins to access the global service and alternative service configs before ActiveStorage::Blob loads. * Make ActiveStorage.service_configurations the default second argument to ActiveStorage::Service.configure. Plugins that just want to use an alternative service defined in config/storage.yml needn't pass in the config themselves.
Diffstat (limited to 'activestorage')
-rw-r--r--activestorage/app/models/active_storage/blob.rb2
-rw-r--r--activestorage/lib/active_storage.rb26
-rw-r--r--activestorage/lib/active_storage/engine.rb36
-rw-r--r--activestorage/lib/active_storage/service.rb2
4 files changed, 36 insertions, 30 deletions
diff --git a/activestorage/app/models/active_storage/blob.rb b/activestorage/app/models/active_storage/blob.rb
index c9fbafad1f..4da1605448 100644
--- a/activestorage/app/models/active_storage/blob.rb
+++ b/activestorage/app/models/active_storage/blob.rb
@@ -29,7 +29,7 @@ class ActiveStorage::Blob < ActiveRecord::Base
has_secure_token :key
store :metadata, accessors: [ :analyzed, :identified ], coder: ActiveRecord::Coders::JSON
- class_attribute :service
+ class_attribute :service, default: ActiveStorage.service
has_many :attachments
diff --git a/activestorage/lib/active_storage.rb b/activestorage/lib/active_storage.rb
index 5c5da551ae..c00c9f8037 100644
--- a/activestorage/lib/active_storage.rb
+++ b/activestorage/lib/active_storage.rb
@@ -41,19 +41,25 @@ module ActiveStorage
autoload :Previewer
autoload :Analyzer
- mattr_accessor :logger
- mattr_accessor :verifier
- mattr_accessor :queues, default: {}
- mattr_accessor :previewers, default: []
- mattr_accessor :analyzers, default: []
+ mattr_accessor :service_configurations, default: {}
+ mattr_accessor :service
+
+ mattr_accessor :queues, default: {}
+ mattr_accessor :previewers, default: []
+ mattr_accessor :analyzers, default: []
mattr_accessor :variant_processor, default: :mini_magick
- mattr_accessor :paths, default: {}
- mattr_accessor :variable_content_types, default: []
+ mattr_accessor :paths, default: {}
+
+ mattr_accessor :variable_content_types, default: []
mattr_accessor :content_types_to_serve_as_binary, default: []
- mattr_accessor :content_types_allowed_inline, default: []
- mattr_accessor :binary_content_type, default: "application/octet-stream"
+ mattr_accessor :content_types_allowed_inline, default: []
+ mattr_accessor :binary_content_type, default: "application/octet-stream"
+
mattr_accessor :service_urls_expire_in, default: 5.minutes
- mattr_accessor :routes_prefix, default: "/rails/active_storage"
+ mattr_accessor :routes_prefix, default: "/rails/active_storage"
+
+ mattr_accessor :logger
+ mattr_accessor :verifier
module Transformers
extend ActiveSupport::Autoload
diff --git a/activestorage/lib/active_storage/engine.rb b/activestorage/lib/active_storage/engine.rb
index fc75a8f816..b27a027f3a 100644
--- a/activestorage/lib/active_storage/engine.rb
+++ b/activestorage/lib/active_storage/engine.rb
@@ -95,25 +95,25 @@ module ActiveStorage
end
initializer "active_storage.services" do
- ActiveSupport.on_load(:active_storage_blob) do
- if config_choice = Rails.configuration.active_storage.service
- configs = Rails.configuration.active_storage.service_configurations ||= begin
- config_file = Pathname.new(Rails.root.join("config/storage.yml"))
- raise("Couldn't find Active Storage configuration in #{config_file}") unless config_file.exist?
-
- require "yaml"
- require "erb"
-
- YAML.load(ERB.new(config_file.read).result) || {}
- rescue Psych::SyntaxError => e
- raise "YAML syntax error occurred while parsing #{config_file}. " \
- "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
- "Error: #{e.message}"
- end
-
- ActiveStorage::Blob.service =
+ config.after_initialize do |app|
+ ActiveStorage.service_configurations = begin
+ config_file = Pathname.new(Rails.root.join("config/storage.yml"))
+ raise("Couldn't find Active Storage configuration in #{config_file}") unless config_file.exist?
+
+ require "yaml"
+ require "erb"
+
+ YAML.load(ERB.new(config_file.read).result) || {}
+ rescue Psych::SyntaxError => e
+ raise "YAML syntax error occurred while parsing #{config_file}. " \
+ "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
+ "Error: #{e.message}"
+ end
+
+ if global_service_name = app.config.active_storage.service
+ ActiveStorage.service =
begin
- ActiveStorage::Service.configure config_choice, configs
+ ActiveStorage::Service.configure(global_service_name)
rescue => e
raise e, "Cannot load `Rails.config.active_storage.service`:\n#{e.message}", e.backtrace
end
diff --git a/activestorage/lib/active_storage/service.rb b/activestorage/lib/active_storage/service.rb
index aac1e62e7f..f0d04153a1 100644
--- a/activestorage/lib/active_storage/service.rb
+++ b/activestorage/lib/active_storage/service.rb
@@ -45,7 +45,7 @@ module ActiveStorage
# 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.
- def configure(service_name, configurations)
+ def configure(service_name, configurations = ActiveStorage.service_configurations)
Configurator.build(service_name, configurations)
end