guard-livereload 1.1.3 → 1.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 +7 -0
- data/README.md +8 -14
- data/js/livereload.js +1055 -0
- data/lib/guard/livereload.rb +7 -7
- data/lib/guard/livereload/reactor.rb +22 -14
- data/lib/guard/livereload/version.rb +1 -1
- data/lib/guard/livereload/websocket.rb +39 -0
- metadata +21 -47
data/lib/guard/livereload.rb
CHANGED
@@ -3,8 +3,10 @@ require 'guard/guard'
|
|
3
3
|
|
4
4
|
module Guard
|
5
5
|
class LiveReload < Guard
|
6
|
-
|
7
|
-
|
6
|
+
require 'guard/livereload/websocket'
|
7
|
+
require 'guard/livereload/reactor'
|
8
|
+
|
9
|
+
attr_accessor :reactor, :options
|
8
10
|
|
9
11
|
# =================
|
10
12
|
# = Guard methods =
|
@@ -13,17 +15,15 @@ module Guard
|
|
13
15
|
def initialize(watchers = [], options = {})
|
14
16
|
super
|
15
17
|
@options = {
|
16
|
-
:api_version => '1.6',
|
17
18
|
:host => '0.0.0.0',
|
18
|
-
:port => '35729',
|
19
|
-
:apply_js_live => true,
|
20
19
|
:apply_css_live => true,
|
20
|
+
:override_url => false,
|
21
21
|
:grace_period => 0
|
22
22
|
}.update(options)
|
23
23
|
end
|
24
24
|
|
25
25
|
def start
|
26
|
-
@reactor = Reactor.new(
|
26
|
+
@reactor = Reactor.new(options)
|
27
27
|
end
|
28
28
|
|
29
29
|
def stop
|
@@ -31,7 +31,7 @@ module Guard
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def run_on_changes(paths)
|
34
|
-
sleep
|
34
|
+
sleep options[:grace_period]
|
35
35
|
reactor.reload_browser(paths)
|
36
36
|
end
|
37
37
|
|
@@ -1,11 +1,9 @@
|
|
1
|
-
require 'em-websocket'
|
2
1
|
require 'multi_json'
|
3
2
|
|
4
3
|
module Guard
|
5
4
|
class LiveReload
|
6
5
|
class Reactor
|
7
|
-
|
8
|
-
attr_reader :thread, :web_sockets
|
6
|
+
attr_reader :web_sockets, :thread, :options
|
9
7
|
|
10
8
|
def initialize(options)
|
11
9
|
@web_sockets = []
|
@@ -20,13 +18,16 @@ module Guard
|
|
20
18
|
def reload_browser(paths = [])
|
21
19
|
UI.info "Reloading browser: #{paths.join(' ')}"
|
22
20
|
paths.each do |path|
|
23
|
-
data =
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
}
|
21
|
+
data = {
|
22
|
+
:command => 'reload',
|
23
|
+
:path => "#{Dir.pwd}/#{path}",
|
24
|
+
:liveCSS => @options[:apply_css_live]
|
25
|
+
}
|
26
|
+
if options[:override_url] && File.exist?(path)
|
27
|
+
data[:overrideURL] = '/' + path
|
28
|
+
end
|
28
29
|
UI.debug data
|
29
|
-
|
30
|
+
web_sockets.each { |ws| ws.send(MultiJson.encode(data)) }
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
@@ -35,12 +36,16 @@ module Guard
|
|
35
36
|
def start_threaded_reactor(options)
|
36
37
|
Thread.new do
|
37
38
|
EventMachine.run do
|
38
|
-
UI.info "LiveReload
|
39
|
-
EventMachine.start_server(options[:host],
|
39
|
+
UI.info "LiveReload is waiting for a browser to connect."
|
40
|
+
EventMachine.start_server(options[:host], 35729, WebSocket, {}) do |ws|
|
40
41
|
ws.onopen do
|
41
42
|
begin
|
42
43
|
UI.info "Browser connected."
|
43
|
-
ws.send
|
44
|
+
ws.send MultiJson.encode({
|
45
|
+
:command => 'hello',
|
46
|
+
:protocols => ['http://livereload.com/protocols/official-7'],
|
47
|
+
:serverName => 'guard-livereload'
|
48
|
+
})
|
44
49
|
@web_sockets << ws
|
45
50
|
rescue
|
46
51
|
UI.errror $!
|
@@ -49,11 +54,14 @@ module Guard
|
|
49
54
|
end
|
50
55
|
|
51
56
|
ws.onmessage do |msg|
|
52
|
-
|
57
|
+
msg = MultiJson.decode(msg)
|
58
|
+
if msg['command'] == 'url'
|
59
|
+
UI.info "Browser URL: #{msg['url']}"
|
60
|
+
end
|
53
61
|
end
|
54
62
|
|
55
63
|
ws.onclose do
|
56
|
-
@web_sockets.delete
|
64
|
+
@web_sockets.delete(ws)
|
57
65
|
UI.info "Browser disconnected."
|
58
66
|
end
|
59
67
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'eventmachine'
|
2
|
+
require 'em-websocket'
|
3
|
+
require "http/parser"
|
4
|
+
|
5
|
+
module Guard
|
6
|
+
class LiveReload
|
7
|
+
class WebSocket < EventMachine::WebSocket::Connection
|
8
|
+
def dispatch data
|
9
|
+
parser = Http::Parser.new
|
10
|
+
parser << data
|
11
|
+
if parser.http_method != 'GET' || parser.upgrade?
|
12
|
+
super #pass the request to websocket
|
13
|
+
elsif parser.request_path == '/livereload.js'
|
14
|
+
serve_file File.expand_path("../../../../js/livereload.js", __FILE__)
|
15
|
+
elsif File.exist?(parser.request_path[1..-1])
|
16
|
+
serve_file parser.request_path[1..-1] # Strip leading slash
|
17
|
+
else
|
18
|
+
send_data "HTTP/1.1 404 Not Found\r\nContent-Type: text/plain\r\nContent-Length: 13\r\n\r\n404 Not Found"
|
19
|
+
close_connection_after_writing
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def serve_file path
|
24
|
+
UI.debug "Serving file #{path}"
|
25
|
+
content_type = case File.extname(path)
|
26
|
+
when '.css' then 'text/css'
|
27
|
+
when '.js' then 'application/ecmascript'
|
28
|
+
when '.gif' then 'image/gif'
|
29
|
+
when '.jpeg', '.jpg' then 'image/jpeg'
|
30
|
+
when '.png' then 'image/png'
|
31
|
+
else; 'text/plain'
|
32
|
+
end
|
33
|
+
send_data "HTTP/1.1 200 OK\r\nContent-Type: #{content_type}\r\nContent-Length: #{File.size path}\r\n\r\n"
|
34
|
+
stream_file_data(path).callback { close_connection_after_writing }
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
CHANGED
@@ -1,52 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-livereload
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Thibaud Guillaume-Gentil
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-04-14 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: guard
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.5.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 1.5.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: em-websocket
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 0.2.0
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 0.2.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: multi_json
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,51 +55,31 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: bundler
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
61
|
+
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
68
|
+
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
|
-
version: '
|
75
|
+
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '2.11'
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: guard-rspec
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ~>
|
80
|
+
- - '>='
|
100
81
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
102
|
-
type: :development
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '1.0'
|
82
|
+
version: '0'
|
110
83
|
description: Guard::LiveReload automatically reloads your browser when 'view' files
|
111
84
|
are modified.
|
112
85
|
email:
|
@@ -118,31 +91,32 @@ files:
|
|
118
91
|
- lib/guard/livereload/reactor.rb
|
119
92
|
- lib/guard/livereload/templates/Guardfile
|
120
93
|
- lib/guard/livereload/version.rb
|
94
|
+
- lib/guard/livereload/websocket.rb
|
121
95
|
- lib/guard/livereload.rb
|
122
96
|
- LICENSE
|
123
97
|
- README.md
|
98
|
+
- js/livereload.js
|
124
99
|
homepage: http://rubygems.org/gems/guard-livereload
|
125
100
|
licenses: []
|
101
|
+
metadata: {}
|
126
102
|
post_install_message:
|
127
103
|
rdoc_options: []
|
128
104
|
require_paths:
|
129
105
|
- lib
|
130
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
-
none: false
|
132
107
|
requirements:
|
133
|
-
- -
|
108
|
+
- - '>='
|
134
109
|
- !ruby/object:Gem::Version
|
135
110
|
version: '0'
|
136
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
112
|
requirements:
|
139
|
-
- -
|
113
|
+
- - '>='
|
140
114
|
- !ruby/object:Gem::Version
|
141
115
|
version: 1.3.6
|
142
116
|
requirements: []
|
143
117
|
rubyforge_project: guard-livereload
|
144
|
-
rubygems_version:
|
118
|
+
rubygems_version: 2.0.3
|
145
119
|
signing_key:
|
146
|
-
specification_version:
|
120
|
+
specification_version: 4
|
147
121
|
summary: Guard gem for livereload
|
148
122
|
test_files: []
|