Sha256: 7903a06c80380e1a77f575e5a155903f151ef0c7be84bf1f0d17bfb95a3e2a52
Contents?: true
Size: 1.95 KB
Versions: 8
Compression:
Stored size: 1.95 KB
Contents
# frozen_string_literal: true require "dry/system/errors" module Dry module System # Default component loader implementation # # This class is configured by default for every System::Container. You can # provide your own and use it in your containers too. # # @example # class MyLoader < Dry::System::Loader # def call(*args) # constant.build(*args) # end # end # # class MyApp < Dry::System::Container # configure do |config| # # ... # config.component_dirs.loader = MyLoader # end # end # # @api public class Loader class << self # Requires the component's source file # # @api public def require!(component) require(component.require_path) self end # Returns an instance of the component # # Provided optional args are passed to object's constructor # # @param [Array] args Optional constructor args # # @return [Object] # # @api public def call(component, *args) require!(component) constant = self.constant(component) if singleton?(constant) constant.instance(*args) else constant.new(*args) end end ruby2_keywords(:call) if respond_to?(:ruby2_keywords, true) # Returns the component's class constant # # @return [Class] # # @api public def constant(component) inflector = component.inflector const_name = inflector.camelize(component.const_path) inflector.constantize(const_name) rescue NameError => e raise ComponentNotLoadableError.new(component, e) end private def singleton?(constant) constant.respond_to?(:instance) && !constant.respond_to?(:new) end end end end end
Version data entries
8 entries across 8 versions & 1 rubygems