sinatra-pubsub 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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::Pubsub
1
+ # Sinatra::PubSub
2
2
 
3
- TODO: Write a gem description
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
- TODO: Write usage instructions here
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
 
@@ -14,5 +14,9 @@ module Sinatra
14
14
  app.helpers Helpers
15
15
  subscribe
16
16
  end
17
+
18
+ def self.set(*args)
19
+ App.set(*args)
20
+ end
17
21
  end
18
22
  end
@@ -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
 
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module PubSub
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
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.2
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-16 00:00:00.000000000 Z
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: 1.8.25
126
+ rubygems_version: 2.0.3
145
127
  signing_key:
146
- specification_version: 3
128
+ specification_version: 4
147
129
  summary: Sinatra PubSub
148
130
  test_files: []