aboutsummaryrefslogblamecommitdiffstats
path: root/activestorage/lib/active_storage/service/configurator.rb
blob: a0afdaa91234c0fd78ad29cc84eca9ec4cc048a5 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                   
                             
 

                                              

     
                                
                                                        
     
 



                                                                       
 



                                                                                                                                                 


         
                           
                                                                            
                                                               

       
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