Module: ActiveSupport::Dependencies

Defined in:
lib/brick/extensions.rb

Class Method Summary collapse

Class Method Details

._brick_autoload_module!Object

%%% Probably a little more targeted than other approaches we’ve taken thusfar This happens before the whole parent check



1381
# File 'lib/brick/extensions.rb', line 1381

alias _brick_autoload_module! autoload_module!

.autoload_module!(*args) ⇒ Object



1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
# File 'lib/brick/extensions.rb', line 1382

def autoload_module!(*args)
  into, const_name, qualified_name, path_suffix = args
  if (base_class_name = ::Brick.config.sti_namespace_prefixes&.fetch("::#{into.name}::", nil))
    base_class_name = "::#{base_class_name}" unless base_class_name.start_with?('::')
  end
  if (base_class = base_class_name&.constantize)
    ::Brick.sti_models[qualified_name] = { base: base_class }
    # Build subclass and place it into the specially STI-namespaced module
    into.const_set(const_name.to_sym, klass = Class.new(base_class))
    # %%% used to also have:  autoload_once_paths.include?(base_path) ||
    autoloaded_constants << qualified_name unless autoloaded_constants.include?(qualified_name)
    klass
  elsif (base_class = ::Brick.config.sti_namespace_prefixes&.fetch("::#{const_name}", nil)&.constantize)
    begin
      # Attempt to find an existing implementation for this subclass
      base_class.module_parent.const_get(const_name)
    rescue
      # Build subclass and place it in the same module as its parent
      base_class.module_parent.const_set(const_name.to_sym, klass = Class.new(base_class))
    end
  else
    _brick_autoload_module!(*args)
  end
end