jugglite 0.5.0 → 0.6.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 +4 -4
- data/CHANGELOG.md +39 -0
- data/README.md +22 -4
- data/lib/jugglite/app.rb +2 -1
- data/lib/jugglite/version.rb +1 -1
- data/spec/acceptance/allowed_channels_spec.rb +25 -0
- metadata +4 -4
- data/CHANGELOG +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b51ae9f570f0b97660639998883771ec4d6595a
|
4
|
+
data.tar.gz: 5c4908a07f85a24caa317db97df70f37273edd0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb7095e9e0efc013925a87827d6df16eaff2bc1e05875900d5197c90fcdcf363bca5cce164ce60b110182adfc53ede9f180c1db817fc4aede2b40b44df63da93
|
7
|
+
data.tar.gz: c6c9942ae51bf578bdadff91b2690b84c42bae8bd1780fbc4daef488e86e5b47cd712ad3f3b43cb46241c09cf7fd0311632997deb9f5c9faa11f4840f342e1b7
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
## 0.6.0 / 2015-02-23
|
2
|
+
|
3
|
+
* Don't break when channel parameter is blank
|
4
|
+
|
5
|
+
## 0.5.0 / 2014-05-03
|
6
|
+
|
7
|
+
* New option: +allowed_channels+ to limit/authorize which channels a request can listen to
|
8
|
+
|
9
|
+
## 0.4.0 / 2014-03-12
|
10
|
+
|
11
|
+
* Support for listening to multiple channels
|
12
|
+
|
13
|
+
## 0.3.0 / 2014-03-06
|
14
|
+
|
15
|
+
* Support redis namespace option
|
16
|
+
|
17
|
+
## 0.2.0 / 2014-02-25
|
18
|
+
|
19
|
+
* If message is JSON, extract 'event' and 'id' from the message
|
20
|
+
|
21
|
+
## 0.1.0 / 2014-02-21
|
22
|
+
|
23
|
+
* Compatible with newer em-hiredis
|
24
|
+
|
25
|
+
## 0.0.4 / 2012-12-13
|
26
|
+
|
27
|
+
* support for listening to a unix socket using the --socket commandline option
|
28
|
+
|
29
|
+
## 0.0.3 / 2012-11-04
|
30
|
+
|
31
|
+
* support IE7+ through [Remy's Polyfill](https://github.com/remy/polyfills/blob/master/EventSource.js), [read more](http://html5doctor.com/server-sent-events/)
|
32
|
+
|
33
|
+
## 0.0.2.alpha / 2012-11-04
|
34
|
+
|
35
|
+
* standalone binary supports some thin commandline options
|
36
|
+
|
37
|
+
## 0.0.1.alpha / 2012-11-15
|
38
|
+
|
39
|
+
* Initial gem release
|
data/README.md
CHANGED
@@ -20,7 +20,26 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Server Usage
|
22
22
|
|
23
|
-
I use
|
23
|
+
I used to use Jugglite as rack middleware in development and as a standalone binary behind nginx in production. Nowadays I run my rails application using thin in production so I can mount Jugglite in the routes.rb file.
|
24
|
+
|
25
|
+
### Inside Rails's routes.rb
|
26
|
+
|
27
|
+
This only works with an EventMachine based webserver that supports rack's async.callback. I have only tested this in production with Thin, but it might work with Rainbows or Puma.
|
28
|
+
|
29
|
+
This setup is great because it allows you to do channel authorization on a per request basis.
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
# config/routes.rb
|
33
|
+
# ...
|
34
|
+
|
35
|
+
@allowed_channels = ->(request) {
|
36
|
+
user_id = request.session['user_id']
|
37
|
+
user_id ? ['broadcast', "player_#{user_id}"] : []
|
38
|
+
}
|
39
|
+
get 'stream', to: Jugglite::App.new(nil, namespace: "app:#{Rails.env}:", allowed_channels: @allowed_channels)
|
40
|
+
|
41
|
+
# ...
|
42
|
+
```
|
24
43
|
|
25
44
|
### Stand-alone binary
|
26
45
|
|
@@ -30,7 +49,7 @@ You can run the binary from any terminal like this (these options are the defaul
|
|
30
49
|
|
31
50
|
`jugglite --address 0.0.0.0 --port 3000 --max-conns 1024`
|
32
51
|
|
33
|
-
### As Rack middleware
|
52
|
+
### As Rack middleware
|
34
53
|
|
35
54
|
Add it to your `config.ru` file and make sure your application runs using Thin:
|
36
55
|
|
@@ -41,7 +60,7 @@ use Jugglite::App, path: '/stream', namespace: 'myapp:' if ENV['RACK_ENV'] == 'd
|
|
41
60
|
run MyRails::Application
|
42
61
|
```
|
43
62
|
|
44
|
-
### Behind Nginx
|
63
|
+
### Behind Nginx
|
45
64
|
|
46
65
|
NOTE: because the html5 SSE implementation requires the connection to have the same hostname and port, you'll need to add a reverse proxy in front of your app and jugglite.
|
47
66
|
|
@@ -90,7 +109,6 @@ server {
|
|
90
109
|
}
|
91
110
|
```
|
92
111
|
|
93
|
-
|
94
112
|
## Client Usage
|
95
113
|
|
96
114
|
Use the browser's native [Server-Sent Events](http://www.html5rocks.com/en/tutorials/eventsource/basics/) implementation:
|
data/lib/jugglite/app.rb
CHANGED
@@ -81,7 +81,8 @@ module Jugglite
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def channels_for_request(request)
|
84
|
-
|
84
|
+
channel_string = request.params["channel"] || ""
|
85
|
+
channels = Array(channel_string.split(","))
|
85
86
|
# Sanitize channels
|
86
87
|
channels = channels & allowed_channels(request) if @options[:allowed_channels]
|
87
88
|
channels.map! { |channel| @options[:namespace] + channel }
|
data/lib/jugglite/version.rb
CHANGED
@@ -52,6 +52,31 @@ describe "allowed_channels" do
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
describe "no channel" do
|
56
|
+
before(:each) do
|
57
|
+
@jugglite = Jugglite::App.new(nil, allowed_channels: ->(request) { [@channel2] })
|
58
|
+
start_server(@jugglite)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "allows blank channel" do
|
62
|
+
Net::HTTP.start(@host, @port) do |http|
|
63
|
+
request = Net::HTTP::Get.new("/")
|
64
|
+
|
65
|
+
body = ""
|
66
|
+
http.request(request) do |response|
|
67
|
+
response.read_body do |chunk|
|
68
|
+
body << chunk
|
69
|
+
body.should include(": registered to channels: ")
|
70
|
+
body.should_not include(@channel1)
|
71
|
+
http.finish
|
72
|
+
break
|
73
|
+
end
|
74
|
+
break
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
55
80
|
describe "as a Proc" do
|
56
81
|
before(:each) do
|
57
82
|
@jugglite = Jugglite::App.new(nil, allowed_channels: ->(request) { [@channel2] })
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jugglite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- andruby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thin
|
@@ -77,7 +77,7 @@ files:
|
|
77
77
|
- ".gitignore"
|
78
78
|
- ".rspec"
|
79
79
|
- ".travis.yml"
|
80
|
-
- CHANGELOG
|
80
|
+
- CHANGELOG.md
|
81
81
|
- Gemfile
|
82
82
|
- LICENSE.txt
|
83
83
|
- README.md
|
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
112
|
version: '0'
|
113
113
|
requirements: []
|
114
114
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.
|
115
|
+
rubygems_version: 2.4.5
|
116
116
|
signing_key:
|
117
117
|
specification_version: 4
|
118
118
|
summary: Server Sent Events server written in rack on top of thin inspired by Juggernaut
|
data/CHANGELOG
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
= 0.5.0 / 2014-05-03
|
2
|
-
|
3
|
-
* New option: +allowed_channels+ to limit/authorize which channels a request can listen to
|
4
|
-
|
5
|
-
= 0.4.0 / 2014-03-12
|
6
|
-
|
7
|
-
* Support for listening to multiple channels
|
8
|
-
|
9
|
-
= 0.3.0 / 2014-03-06
|
10
|
-
|
11
|
-
* Support redis namespace option
|
12
|
-
|
13
|
-
= 0.2.0 / 2014-02-25
|
14
|
-
|
15
|
-
* If message is JSON, extract 'event' and 'id' from the message
|
16
|
-
|
17
|
-
= 0.1.0 / 2014-02-21
|
18
|
-
|
19
|
-
* Compatible with newer em-hiredis
|
20
|
-
|
21
|
-
= 0.0.4 / 2012-12-13
|
22
|
-
|
23
|
-
* support for listening to a unix socket using the --socket commandline option
|
24
|
-
|
25
|
-
= 0.0.3 / 2012-11-04
|
26
|
-
|
27
|
-
* support for Remy's Polyfill (which adds support for IE7+)
|
28
|
-
see https://github.com/remy/polyfills/blob/master/EventSource.js
|
29
|
-
and http://html5doctor.com/server-sent-events/
|
30
|
-
|
31
|
-
= 0.0.2.alpha / 2012-11-04
|
32
|
-
|
33
|
-
* standalone binary supports some thin commandline options
|
34
|
-
|
35
|
-
= 0.0.1.alpha / 2012-11-15
|
36
|
-
|
37
|
-
* Initial gem release
|