aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage/lib/active_storage/service/configurator.rb
blob: a0afdaa91234c0fd78ad29cc84eca9ec4cc048a5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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.underscore}_service"
      ActiveStorage::Service.const_get(:"#{class_name}Service")
    end
end