sinatra-pubsub 0.0.2 → 0.0.3
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 +40 -3
- data/lib/sinatra/pubsub.rb +4 -0
- data/lib/sinatra/pubsub/app.rb +25 -0
- data/lib/sinatra/pubsub/version.rb +1 -1
- metadata +11 -29
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e533484ef0150bb3ec9c2aef6dee5e4513fd652a
|
4
|
+
data.tar.gz: 3a667d352c4f4d3e59f5079bbb843135a0db541d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9f355f18937e08c6b2291a2cd5a9a06f6ff5b1d336219ce504a66f6e6db98e739b8283998abecf43af84016c5519887d176f06b44c19e905ec974dba3f20dd9c
|
7
|
+
data.tar.gz: 16d2087cfc55c7e8ab42dfe3b30322c959a59803e76a0b88e0769c7a233bf8af7090920932569d39d8ff0b9abca2cbd56265f2a80cd4b6cc7a573669d534f2f5
|
data/README.md
CHANGED
@@ -1,6 +1,32 @@
|
|
1
|
-
# Sinatra::
|
1
|
+
# Sinatra::PubSub
|
2
2
|
|
3
|
-
|
3
|
+
PubSub is a little extension to Sinatra that adds basic publish/subscribe streaming
|
4
|
+
using HTML5 Server Sent Events.
|
5
|
+
|
6
|
+
For example, clients can subscribe to events like this:
|
7
|
+
|
8
|
+
var es = new EventSource('/subscribe');
|
9
|
+
es.onmessage = function(e) {
|
10
|
+
console.log(JSON.parse(e.data));
|
11
|
+
};
|
12
|
+
|
13
|
+
And then you can broadcast events to them like this:
|
14
|
+
|
15
|
+
Sinatra::PubSub.publish_all(type: 'tick')
|
16
|
+
|
17
|
+
You can subscribe to specific channels:
|
18
|
+
|
19
|
+
var es = new EventSource('/subscribe/sites/123');
|
20
|
+
|
21
|
+
And publish to them:
|
22
|
+
|
23
|
+
Sinatra::PubSub.publish('sites/123', data: 'hi')
|
24
|
+
|
25
|
+
## Requirements
|
26
|
+
|
27
|
+
* An evented server, such as Thin
|
28
|
+
* Redis
|
29
|
+
* Sinatra
|
4
30
|
|
5
31
|
## Installation
|
6
32
|
|
@@ -18,7 +44,18 @@ Or install it yourself as:
|
|
18
44
|
|
19
45
|
## Usage
|
20
46
|
|
21
|
-
|
47
|
+
Include it in your Sinatra application like so:
|
48
|
+
|
49
|
+
require 'sinatra/pubsub'
|
50
|
+
register Sinatra::PubSub
|
51
|
+
|
52
|
+
This creates a `/subscribe/*` endpoint, which clients can use with `EventSource`.
|
53
|
+
|
54
|
+
You can publish to channels using the `Sinatra::PubSub.publish_all(msg)` or
|
55
|
+
`Sinatra::publish(channel, msg)` methods.
|
56
|
+
|
57
|
+
Messages will be automatically serialized to JSON - you'll need to parse them on the client.
|
58
|
+
See the `./examples` dir for more use-cases.
|
22
59
|
|
23
60
|
## Contributing
|
24
61
|
|
data/lib/sinatra/pubsub.rb
CHANGED
data/lib/sinatra/pubsub/app.rb
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
module Sinatra
|
2
2
|
module PubSub
|
3
3
|
class App < Sinatra::Base
|
4
|
+
configure do
|
5
|
+
set :cors, false
|
6
|
+
set :origin, '*'
|
7
|
+
end
|
8
|
+
|
9
|
+
helpers do
|
10
|
+
def http_origin
|
11
|
+
env['HTTP_ORIGIN']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
before do
|
16
|
+
return unless settings.cors
|
17
|
+
|
18
|
+
origin = http_origin || ''
|
19
|
+
secure = origin =~ /\Ahttps/
|
20
|
+
|
21
|
+
allow = settings.origin
|
22
|
+
allow.gsub!(/\Ahttp:\/\//, 'https://') if secure
|
23
|
+
|
24
|
+
headers['Access-Control-Allow-Origin'] = allow
|
25
|
+
headers['Access-Control-Allow-Methods'] = 'GET'
|
26
|
+
headers['Access-Control-Allow-Credentials'] = 'true'
|
27
|
+
end
|
28
|
+
|
4
29
|
get '/subscribe/?*', :provides => 'text/event-stream' do
|
5
30
|
error 402 unless Stream.enabled?
|
6
31
|
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-pubsub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alex MacCaw
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-29 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
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
|
@@ -30,39 +27,34 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
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'
|
38
34
|
type: :development
|
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'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: thin
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
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
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: sinatra
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
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
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: redis
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ~>
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ~>
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -117,32 +106,25 @@ files:
|
|
117
106
|
homepage: http://github.com/maccman/sinatra-pubsub
|
118
107
|
licenses:
|
119
108
|
- MIT
|
109
|
+
metadata: {}
|
120
110
|
post_install_message:
|
121
111
|
rdoc_options: []
|
122
112
|
require_paths:
|
123
113
|
- lib
|
124
114
|
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
-
none: false
|
126
115
|
requirements:
|
127
|
-
- -
|
116
|
+
- - '>='
|
128
117
|
- !ruby/object:Gem::Version
|
129
118
|
version: '0'
|
130
|
-
segments:
|
131
|
-
- 0
|
132
|
-
hash: -2677468794755988610
|
133
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
-
none: false
|
135
120
|
requirements:
|
136
|
-
- -
|
121
|
+
- - '>='
|
137
122
|
- !ruby/object:Gem::Version
|
138
123
|
version: '0'
|
139
|
-
segments:
|
140
|
-
- 0
|
141
|
-
hash: -2677468794755988610
|
142
124
|
requirements: []
|
143
125
|
rubyforge_project:
|
144
|
-
rubygems_version:
|
126
|
+
rubygems_version: 2.0.3
|
145
127
|
signing_key:
|
146
|
-
specification_version:
|
128
|
+
specification_version: 4
|
147
129
|
summary: Sinatra PubSub
|
148
130
|
test_files: []
|