hot_reloader 0.1.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -7
- data/lib/hot_reloader/version.rb +2 -2
- data/lib/hot_reloader.rb +35 -8
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f238abd11b4178e8c62c1550129bb536eab26894cd2f23d8357796f9d24ff8df
|
4
|
+
data.tar.gz: ce7662f5a23fe9e4f15f42d640df0a8739c24d5827b4448be1162938d6b4c64e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed014be9bed50b5f4695edbc835944465b6de1b67847b871469c1f592628fa3eb2358338d13c6ecb4ccb0dc5fa12017fda14e71fdb9730786aac80b385cc9437
|
7
|
+
data.tar.gz: 7f39204335c2e31c898997255d8d7a5264fd7df69675ce63e9e0fb2f050009fd1051a86127ddd06e35b3fb1bdfee995ca3864a5479b7ad92c90b75bd2174b507
|
data/README.md
CHANGED
@@ -27,17 +27,14 @@ require 'roda'
|
|
27
27
|
require 'hot_reloader'
|
28
28
|
|
29
29
|
if ENV['RACK_ENV'] == 'production'
|
30
|
-
HotReloader.
|
31
|
-
run ->(env) {
|
32
|
-
App.call(env)
|
33
|
-
}
|
34
|
-
else
|
30
|
+
HotReloader.eager_load(__dir__, 'another/root/path')
|
35
31
|
run App
|
32
|
+
else
|
33
|
+
HotReloader.will_listen([__dir__, 'another/root/path'])
|
34
|
+
run ->(env) { App.call(env) }
|
36
35
|
end
|
37
36
|
```
|
38
37
|
|
39
|
-
Then create app.rb in ROOT directory.
|
40
|
-
|
41
38
|
```rb
|
42
39
|
# app.rb
|
43
40
|
|
data/lib/hot_reloader/version.rb
CHANGED
data/lib/hot_reloader.rb
CHANGED
@@ -1,14 +1,41 @@
|
|
1
|
+
require 'singleton'
|
1
2
|
require 'zeitwerk'
|
2
3
|
require 'listen'
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
class HotReloader
|
6
|
+
include Singleton
|
6
7
|
|
7
|
-
def
|
8
|
-
loader = Zeitwerk::Loader.new
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
def initialize
|
9
|
+
@loader = Zeitwerk::Loader.new
|
10
|
+
end
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def will_listen(*folders, logger: method(:puts), ignore: [])
|
14
|
+
folders = folders.flatten
|
15
|
+
setup_loader(folders, logger: logger, ignore: ignore)
|
16
|
+
Listen.to(*folders) { loader.reload }.start
|
17
|
+
end
|
18
|
+
|
19
|
+
def eager_load(*folders, logger: method(:puts))
|
20
|
+
folders = folders.flatten
|
21
|
+
setup_loader(folders, logger: logger, ignore: [])
|
22
|
+
loader.eager_load
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def loader
|
28
|
+
instance.instance_variable_get(:@loader)
|
29
|
+
end
|
30
|
+
|
31
|
+
def setup_loader(folders, logger:, ignore:)
|
32
|
+
raise 'ignore: only accept an array of glob patterns string or Pathname objects.' unless ignore.is_a? Array
|
33
|
+
raise 'you must set the root folders from which you want to load watched files.' if folders&.empty?
|
34
|
+
|
35
|
+
folders.each {|folder| loader.push_dir(folder) }
|
36
|
+
loader.logger = logger
|
37
|
+
loader.ignore(ignore) unless ignore.empty?
|
38
|
+
loader.setup
|
39
|
+
end
|
13
40
|
end
|
14
41
|
end
|