diff options
author | George Claghorn <george@basecamp.com> | 2019-03-31 07:46:18 -0400 |
---|---|---|
committer | George Claghorn <george@basecamp.com> | 2019-03-31 07:46:18 -0400 |
commit | 002684e36e813469c3585e193f0698784c88278b (patch) | |
tree | 1c916600c4fb69445fe382d7a115627a2456386a | |
parent | 51ab5cb0432c483422112ebbb274855a3fa5ecc8 (diff) | |
download | rails-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.
-rw-r--r-- | activestorage/app/models/active_storage/blob.rb | 2 | ||||
-rw-r--r-- | activestorage/lib/active_storage.rb | 26 | ||||
-rw-r--r-- | activestorage/lib/active_storage/engine.rb | 36 | ||||
-rw-r--r-- | activestorage/lib/active_storage/service.rb | 2 |
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 |