mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
9330d01ada
git-subtree-dir: activestorage git-subtree-mainline:0d58e7e478
git-subtree-split:3f4a7218a4
28 lines
842 B
Ruby
28 lines
842 B
Ruby
class ActiveStorage::Service::Configurator #:nodoc:
|
|
attr_reader :configurations
|
|
|
|
def self.build(service_name, configurations)
|
|
new(configurations).build(service_name)
|
|
end
|
|
|
|
def initialize(configurations)
|
|
@configurations = configurations.deep_symbolize_keys
|
|
end
|
|
|
|
def build(service_name)
|
|
config = config_for(service_name.to_sym)
|
|
resolve(config.fetch(:service)).build(**config, configurator: self)
|
|
end
|
|
|
|
private
|
|
def config_for(name)
|
|
configurations.fetch name do
|
|
raise "Missing configuration for the #{name.inspect} Active Storage service. Configurations available for #{configurations.keys.inspect}"
|
|
end
|
|
end
|
|
|
|
def resolve(class_name)
|
|
require "active_storage/service/#{class_name.to_s.downcase}_service"
|
|
ActiveStorage::Service.const_get(:"#{class_name}Service")
|
|
end
|
|
end
|