Class: SolidObjects::ApplicationActorLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_objects/application_actor_loader.rb,
sig/generated/lib/solid_objects/application_actor_loader.rbs

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(application: Rails.application, autoloader: Rails.autoloaders.main) ⇒ ApplicationActorLoader

Returns a new instance of ApplicationActorLoader.

RBS:

  • (?application: untyped, ?autoloader: untyped) -> void

Parameters:

  • application: (Object) (defaults to: Rails.application)
  • autoloader: (Object) (defaults to: Rails.autoloaders.main)


9
10
11
12
# File 'lib/solid_objects/application_actor_loader.rb', line 9

def initialize(application: Rails.application, autoloader: Rails.autoloaders.main)
  @application = application
  @autoloader = autoloader
end

Instance Attribute Details

#applicationObject (readonly)

Returns the value of attribute application.

Returns:

  • (Object)


28
29
30
# File 'lib/solid_objects/application_actor_loader.rb', line 28

def application
  @application
end

#autoloaderObject (readonly)

Returns the value of attribute autoloader.

Returns:

  • (Object)


28
29
30
# File 'lib/solid_objects/application_actor_loader.rb', line 28

def autoloader
  @autoloader
end

Instance Method Details

#actor_directoriesArray[String]

RBS:

  • () -> Array[String]

Returns:

  • (Array[String])


31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/solid_objects/application_actor_loader.rb', line 31

def actor_directories
  configured_directories = application.paths["app/actors"]&.existent || []
  conventional_directories = application.paths["app"].existent.select do |application_directory|
    File.basename(application_directory) == "actors"
  end
  managed_directories = autoloader.dirs.map { |directory| File.expand_path(directory) }

  (configured_directories + conventional_directories)
    .select { |directory| Dir.exist?(directory) }
    .map { |directory| File.expand_path(directory) }
    .select { |directory| managed_directories.include?(directory) }
    .uniq
end

#callvoid

This method returns an undefined value.

RBS:

  • () -> void



15
16
17
18
# File 'lib/solid_objects/application_actor_loader.rb', line 15

def call
  actor_directories.each { |directory| autoloader.eager_load_dir(directory) }
  current_actor_classes.each(&:ensure_registered!)
end

#current_actor_classesArray[Class]

RBS:

  • () -> Array[Class]

Returns:

  • (Array[Class])


46
47
48
49
50
51
# File 'lib/solid_objects/application_actor_loader.rb', line 46

def current_actor_classes
  Actor.descendants.select do |actor_class|
    actor_class.name &&
      actor_class.name.safe_constantize.equal?(actor_class)
  end
end

#installvoid

This method returns an undefined value.

RBS:

  • () -> void



21
22
23
24
# File 'lib/solid_objects/application_actor_loader.rb', line 21

def install
  application.reloader.to_prepare { call }
  call
end