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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec0e3c1431bef973f80a63c492edc79bae5eb435fd280d8b0594323d10ff0396
4
- data.tar.gz: 5496d56ab76af81abbe464317f02c56758a72d297702e47068ebe5375351b35a
3
+ metadata.gz: f238abd11b4178e8c62c1550129bb536eab26894cd2f23d8357796f9d24ff8df
4
+ data.tar.gz: ce7662f5a23fe9e4f15f42d640df0a8739c24d5827b4448be1162938d6b4c64e
5
5
  SHA512:
6
- metadata.gz: a3bd2875289eaf879180477d43b1d924febdcef2dc1caf3aaedda22a43718343cfa2411e425fecd8ac3de4b35d5596d250c55a6b23902f53c6a050b8ee730e30
7
- data.tar.gz: 7fff7f4d9b5e4e86a9e72dafc73e795215e661785e13e52577aaa69d089d2454a92abb99bcf18f4a04f9fd975a8284fc65aeebf8b69d114d93922f0d45d1a2ae
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.will_listen(__dir__)
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
 
@@ -1,5 +1,5 @@
1
- module HotReloader
2
- VERSION = [0, 1, 0]
1
+ class HotReloader
2
+ VERSION = [0, 3, 0]
3
3
 
4
4
  class << VERSION
5
5
  def to_s
data/lib/hot_reloader.rb CHANGED
@@ -1,14 +1,41 @@
1
+ require 'singleton'
1
2
  require 'zeitwerk'
2
3
  require 'listen'
3
4
 
4
- module HotReloader
5
- module_function
5
+ class HotReloader
6
+ include Singleton
6
7
 
7
- def will_listen(*directories, logger: method(:puts))
8
- loader = Zeitwerk::Loader.new
9
- loader.logger = logger
10
- directories.each {|directory| loader.push_dir(directory) }
11
- loader.setup
12
- Listen.to(*directories) { loader.reload }.start
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hot_reloader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Billy.Zheng(zw963)