Class: Burg::AppLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/burg/app_loader.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path:, enable_reloading:) ⇒ AppLoader

Returns a new instance of AppLoader.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/burg/app_loader.rb', line 5

def initialize(path:, enable_reloading:)
  @loader = Zeitwerk::Loader.new

  @loader.push_dir path
  @loader.enable_reloading if enable_reloading
  @loader.inflector.inflect(**inflections)
  @loader.setup

  @reload_lock = Concurrent::ReadWriteLock.new

  if @loader.reloading_enabled?
    @start_loading = Once.new do
      Listen.to(*@loader.dirs) do
        @dirty = true
      end.start
    end
  else
    @loader.eager_load
  end
end

Instance Attribute Details

#reload_lockObject (readonly)

Returns the value of attribute reload_lock.



26
27
28
# File 'lib/burg/app_loader.rb', line 26

def reload_lock
  @reload_lock
end

Instance Method Details

#reload!Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/burg/app_loader.rb', line 28

def reload!
  @start_loading&.call

  return unless @dirty

  reload_lock.with_write_lock do
    @dirty = false
    @loader.reload
  end
end

#reloading_enabled?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/burg/app_loader.rb', line 39

def reloading_enabled?
  @loader.reloading_enabled?
end