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



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

alias _brick_autoload_module! autoload_module!

.autoload_module!(*args) ⇒ Object



1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
# File 'lib/brick/extensions.rb', line 1343

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