roda-live_reload 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f8faae85a0ba898de7ce83d5b905570d07ecaa4
4
- data.tar.gz: b83c72c1b71e96d5e15565efafbbcc1e90398993
3
+ metadata.gz: 6367cdd275c3f632b6c937cfbc7d7d58010c77cb
4
+ data.tar.gz: 7f72d32b0be9a90cb99541459b961ea683f1a011
5
5
  SHA512:
6
- metadata.gz: ded2a543fc75e3ceab786041e7dce1761e7f3516f563169d858fc2b56541c098e650d11a55746302428e9e6f63c2fb4851e605f8980bcb33729e1299d1e04a9c
7
- data.tar.gz: b13e1dd71c80ed0b84a3fafbf5ce8f07ceadc4c299e8d27e96f0cb16a511850cf602593064724149176eb7b97f22b5b02eb2f32b2b325f7816ac02cf814ea76b
6
+ metadata.gz: 547ea080239703245875cd61f518887c115c8b6b3a0fdfd1602dd15869e9c723004590a1004256f28cc0e51ac96d8a6ac62e3e800fa88d5777c358fa24433c2a
7
+ data.tar.gz: bec1dd5b716392ec227559739d810f9fa2a9e6ac26594a22f961c9831aaa477dd6036068f6e0e6e9f6d46752585f41344b234563b8ac62a122608c4f031ba599
data/README.md CHANGED
@@ -38,6 +38,13 @@ class App < Roda
38
38
  end
39
39
  ```
40
40
 
41
+ ## Caveats
42
+
43
+ Live Reloading mechanism may not work with Webrick. Tested with Puma.
44
+
45
+ A new SIGINT trap is set per request, possibly bulldozing any previously set SIGINT.
46
+ This may not be an issue for most, but it's something to be aware of.
47
+
41
48
  ## Contributing
42
49
 
43
50
  Bug reports and pull requests are welcome on GitHub at https://github.com/adam12/roda-live_reload.
@@ -26,7 +26,14 @@ module Roda::RodaPlugins # :nodoc:
26
26
 
27
27
  xhr.open("GET", "/_live_reload", true);
28
28
 
29
- xhr.onprogress = function() {
29
+ xhr.onprogress = function(e) {
30
+ /* Try to prevent memory leak */
31
+ if (e.loaded > 1000) {
32
+ window.location.reload();
33
+ }
34
+ };
35
+
36
+ xhr.onload = function(e) {
30
37
  window.location.reload();
31
38
  };
32
39
 
@@ -35,10 +42,9 @@ module Roda::RodaPlugins # :nodoc:
35
42
  setTimeout(reconnect, 1000);
36
43
  };
37
44
 
38
- xhr.onabort = function() {
39
- console.log("Reconnecting after abort");
40
- setTimeout(reconnect, 1000);
41
- };
45
+ window.addEventListener("beforeunload", function(e) {
46
+ xhr.abort();
47
+ }, true);
42
48
 
43
49
  xhr.send();
44
50
  })();
@@ -66,14 +72,26 @@ module Roda::RodaPlugins # :nodoc:
66
72
  # Setup the live reload endpoint
67
73
  def live_reload(opts = {}, &block)
68
74
  on("_live_reload") do
75
+ logger.info "Live Reload listener attached" if logger
69
76
  reader, writer = IO.pipe
70
77
 
71
78
  LiveReload.synchronize do
72
79
  LiveReload.listeners.push(writer)
73
80
  end
74
81
 
82
+ # I wish Rack would provide a shutdown indicator
83
+ trap(:INT) { exit }
84
+
75
85
  scope.stream(loop: true) do |out|
76
- out << reader.gets
86
+ if IO.select([reader], nil, nil, 1)
87
+ out.close
88
+ else
89
+ out << 0
90
+ end
91
+ end
92
+
93
+ LiveReload.synchronize do
94
+ LiveReload.listeners.delete(writer)
77
95
  end
78
96
  end
79
97
  end
@@ -104,7 +122,13 @@ module Roda::RodaPlugins # :nodoc:
104
122
  puts "Changes", modified, added, removed
105
123
 
106
124
  LiveReload.listeners.each do |writer|
107
- writer.puts "Changes"
125
+ begin
126
+ writer << 1
127
+ rescue Errno::EPIPE
128
+ LiveReload.synchronize do
129
+ LiveReload.listeners.delete(writer)
130
+ end
131
+ end
108
132
  end
109
133
  end
110
134
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roda-live_reload
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Daniels
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-16 00:00:00.000000000 Z
11
+ date: 2017-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roda
@@ -86,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
86
  version: '0'
87
87
  requirements: []
88
88
  rubyforge_project:
89
- rubygems_version: 2.6.12
89
+ rubygems_version: 2.6.13
90
90
  signing_key:
91
91
  specification_version: 4
92
92
  summary: Live reloading for Roda