Class: Milktea::Loader

Inherits:
Object
  • Object
show all
Defined in:
lib/milktea/loader.rb

Overview

Auto loading and hot reloading implementation for Milktea applications

Instance Method Summary collapse

Constructor Details

#initialize(config = nil) ⇒ Loader

Returns a new instance of Loader.



8
9
10
11
12
13
14
# File 'lib/milktea/loader.rb', line 8

def initialize(config = nil)
  @config = config || Milktea.config
  @autoload_paths = @config.autoload_paths
  @runtime = @config.runtime
  @loader = nil
  @listeners = []
end

Instance Method Details

#hot_reloadObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/milktea/loader.rb', line 23

def hot_reload
  gem "listen"
  require "listen"

  @listeners = @autoload_paths.map do |path|
    Listen.to(path, only: /\.rb$/) do |modified, added, removed|
      reload if modified.any? || added.any? || removed.any?
    end
  end

  @listeners.each(&:start)
rescue Gem::LoadError
  # Listen gem not available, skip file watching
end

#reloadObject



38
39
40
41
42
43
# File 'lib/milktea/loader.rb', line 38

def reload
  return unless @loader

  @loader.reload
  @runtime.enqueue(Message::Reload.new)
end

#setupObject



16
17
18
19
20
21
# File 'lib/milktea/loader.rb', line 16

def setup
  @loader = Zeitwerk::Loader.new
  @autoload_paths.each { |path| @loader.push_dir(path) }
  @loader.enable_reloading
  @loader.setup
end