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 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: []