slanger 0.3.6 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of slanger might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +31 -11
- data/bin/slanger +6 -2
- data/lib/slanger/config.rb +1 -1
- data/lib/slanger/connection.rb +4 -1
- data/lib/slanger/handler.rb +4 -3
- data/lib/slanger/redis.rb +8 -9
- data/lib/slanger/version.rb +1 -1
- data/lib/slanger/web_socket_server.rb +1 -1
- data/lib/slanger/webhook.rb +3 -9
- data/slanger.rb +1 -0
- metadata +30 -67
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1cdac724fa34f41e7c02b5121fd89806f87b3a28
|
4
|
+
data.tar.gz: 3940aaaa1d1865a98c0f3803f843f57516e4ab00
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 06c0623e550da0a20fc2ac7012042a0dfeb43728e9defca7be8cea88cc05fb5cbf9f88faded888ad877697814259f225336b57bee67eb4d8472b9d12c4653d37
|
7
|
+
data.tar.gz: 69c8d743b15232dae35612707d61cd3040d5d7958896d1b3e5df8de9dc93ceec45ebf29f47a9abe03f6902c67554b0e7a812c803c401a90195f780bcc53bb2b5
|
data/README.md
CHANGED
@@ -1,22 +1,41 @@
|
|
1
1
|
# Slanger
|
2
|
-
##Typical usage
|
3
|
-
|
4
|
-
Slanger is a standalone server ruby implementation of the Pusher protocol. It
|
5
|
-
is not designed to run inside a Rails or sinatra app, but it can be easily
|
6
|
-
installed as a gem.
|
7
2
|
|
3
|
+
Don't do this
|
4
|
+
==============
|
8
5
|
```
|
9
|
-
|
10
|
-
gem install slanger
|
6
|
+
gem 'slanger'
|
11
7
|
```
|
12
8
|
|
13
|
-
|
9
|
+
Do this:
|
10
|
+
--------
|
14
11
|
|
15
|
-
Gemfile
|
16
12
|
```
|
17
|
-
gem
|
13
|
+
gem install slanger
|
14
|
+
redis-server &> /dev/null &
|
15
|
+
|
16
|
+
slanger --app_key 765ec374ae0a69f4ce44 --secret your-pusher-secret
|
18
17
|
```
|
19
18
|
|
19
|
+
If you submit a pull request, please don't be these people:
|
20
|
+
[#109](https://github.com/stevegraham/slanger/pull/109)
|
21
|
+
[#108](https://github.com/stevegraham/slanger/pull/108)
|
22
|
+
[#83](https://github.com/stevegraham/slanger/pull/83)
|
23
|
+
[#81](https://github.com/stevegraham/slanger/pull/81)
|
24
|
+
[#72](https://github.com/stevegraham/slanger/pull/72)
|
25
|
+
[#4](https://github.com/stevegraham/slanger/pull/4)
|
26
|
+
|
27
|
+
I'll try to politely close any new ones but basically,
|
28
|
+
|
29
|
+
Slanger is intended as a server that is easy to install, not a gem inside Rails or Sinatra.
|
30
|
+
|
31
|
+
##Typical usage
|
32
|
+
|
33
|
+
Slanger is a standalone server ruby implementation of the Pusher protocol. It
|
34
|
+
is not designed to run inside a Rails or sinatra app, but it can be easily
|
35
|
+
installed as a gem.
|
36
|
+
|
37
|
+
Bundler has multiple purposes, one of which is useful for installation.
|
38
|
+
|
20
39
|
##About
|
21
40
|
Slanger is an open source server implementation of the Pusher protocol written
|
22
41
|
in Ruby. It is designed to scale horizontally across N nodes and to be agnostic
|
@@ -138,7 +157,7 @@ Slanger supports several configuration options, which can be supplied as command
|
|
138
157
|
|
139
158
|
-b or --webhook_url URL for webhooks. This argument is optional, if given webhook callbacks will be made http://pusher.com/docs/webhooks
|
140
159
|
|
141
|
-
-c or --
|
160
|
+
-c or --cert_file Certificate file for SSL support. This argument is optional, if given, SSL will be enabled
|
142
161
|
|
143
162
|
-v or --[no-]verbose This makes Slanger run verbosely, meaning WebSocket frames will be echoed to STDOUT. Useful for debugging
|
144
163
|
</pre>
|
@@ -178,3 +197,4 @@ Pusher is an awesome service, very reasonably priced, and run by an awesome crew
|
|
178
197
|
© 2011 a Stevie Graham joint.
|
179
198
|
|
180
199
|
|
200
|
+
|
data/bin/slanger
CHANGED
@@ -50,7 +50,7 @@ OptionParser.new do |opts|
|
|
50
50
|
options[:webhook_url] = p
|
51
51
|
end
|
52
52
|
|
53
|
-
opts.on '-c', '--
|
53
|
+
opts.on '-c', '--cert_file FILE', "Certificate file for SSL transport" do |p|
|
54
54
|
options[:tls_options] ||= {}
|
55
55
|
options[:tls_options][:cert_chain_file] = p
|
56
56
|
end
|
@@ -59,6 +59,10 @@ OptionParser.new do |opts|
|
|
59
59
|
options[:debug] = v
|
60
60
|
end
|
61
61
|
|
62
|
+
opts.on "-t" "--activity_timeout", "Activity (ping-pong) Timeout" do |t|
|
63
|
+
options[:activity_timeout] = t
|
64
|
+
end
|
65
|
+
|
62
66
|
opts.parse!
|
63
67
|
|
64
68
|
%w<app_key secret>.each do |parameter|
|
@@ -76,7 +80,7 @@ end
|
|
76
80
|
if options[:tls_options]
|
77
81
|
[:cert_chain_file, :private_key_file].each do |param|
|
78
82
|
raise RuntimeError.new "--#{param} does not exist at `#{options[:tls_options][param]}`" unless File.exists? options[:tls_options][param]
|
79
|
-
raise RuntimeError.new "Both --
|
83
|
+
raise RuntimeError.new "Both --cert_file and --private_key_file need to be specified" unless options[:tls_options][param]
|
80
84
|
end
|
81
85
|
end
|
82
86
|
|
data/lib/slanger/config.rb
CHANGED
@@ -14,7 +14,7 @@ module Slanger
|
|
14
14
|
@options ||= {
|
15
15
|
api_host: '0.0.0.0', api_port: '4567', websocket_host: '0.0.0.0',
|
16
16
|
websocket_port: '8080', debug: false, redis_address: 'redis://0.0.0.0:6379/0',
|
17
|
-
socket_handler: Slanger::Handler, require: []
|
17
|
+
socket_handler: Slanger::Handler, require: [], activity_timeout: 120
|
18
18
|
}
|
19
19
|
end
|
20
20
|
|
data/lib/slanger/connection.rb
CHANGED
@@ -22,7 +22,10 @@ module Slanger
|
|
22
22
|
|
23
23
|
def establish
|
24
24
|
@socket_id = SecureRandom.uuid
|
25
|
-
send_payload nil, 'pusher:connection_established', {
|
25
|
+
send_payload nil, 'pusher:connection_established', {
|
26
|
+
socket_id: @socket_id,
|
27
|
+
activity_timeout: Slanger::Config.activity_timeout
|
28
|
+
}
|
26
29
|
end
|
27
30
|
|
28
31
|
private
|
data/lib/slanger/handler.rb
CHANGED
@@ -12,8 +12,9 @@ module Slanger
|
|
12
12
|
attr_accessor :connection
|
13
13
|
delegate :error, :send_payload, to: :connection
|
14
14
|
|
15
|
-
def initialize(socket)
|
15
|
+
def initialize(socket, handshake)
|
16
16
|
@socket = socket
|
17
|
+
@handshake = handshake
|
17
18
|
@connection = Connection.new(@socket)
|
18
19
|
@subscriptions = {}
|
19
20
|
authenticate
|
@@ -53,7 +54,7 @@ module Slanger
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def pusher_ping(msg)
|
56
|
-
send_payload nil, 'pusher:
|
57
|
+
send_payload nil, 'pusher:pong'
|
57
58
|
end
|
58
59
|
|
59
60
|
def pusher_pong msg; end
|
@@ -79,7 +80,7 @@ module Slanger
|
|
79
80
|
private
|
80
81
|
|
81
82
|
def app_key
|
82
|
-
@
|
83
|
+
@handshake.path.split(/\W/)[2]
|
83
84
|
end
|
84
85
|
|
85
86
|
def valid_app_key? app_key
|
data/lib/slanger/redis.rb
CHANGED
@@ -8,7 +8,7 @@ module Slanger
|
|
8
8
|
extend Forwardable
|
9
9
|
|
10
10
|
def_delegator :publisher, :publish
|
11
|
-
def_delegators :subscriber, :
|
11
|
+
def_delegators :subscriber, :subscribe
|
12
12
|
def_delegators :regular_connection, :hgetall, :hdel, :hset, :hincrby
|
13
13
|
|
14
14
|
private
|
@@ -22,7 +22,13 @@ module Slanger
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def subscriber
|
25
|
-
@subscriber ||= new_connection
|
25
|
+
@subscriber ||= new_connection.pubsub.tap do |c|
|
26
|
+
c.on(:message) do |channel, message|
|
27
|
+
message = JSON.parse message
|
28
|
+
c = Channel.from message['channel']
|
29
|
+
c.dispatch message, channel
|
30
|
+
end
|
31
|
+
end
|
26
32
|
end
|
27
33
|
|
28
34
|
def new_connection
|
@@ -30,12 +36,5 @@ module Slanger
|
|
30
36
|
end
|
31
37
|
|
32
38
|
extend self
|
33
|
-
|
34
|
-
# Dispatch messages received from Redis to their destination channel.
|
35
|
-
on(:message) do |channel, message|
|
36
|
-
message = JSON.parse message
|
37
|
-
c = Channel.from message['channel']
|
38
|
-
c.dispatch message, channel
|
39
|
-
end
|
40
39
|
end
|
41
40
|
end
|
data/lib/slanger/version.rb
CHANGED
@@ -24,7 +24,7 @@ module Slanger
|
|
24
24
|
# Keep track of handler instance in instance of EM::Connection to ensure a unique handler instance is used per connection.
|
25
25
|
ws.class_eval { attr_accessor :connection_handler }
|
26
26
|
# Delegate connection management to handler instance.
|
27
|
-
ws.onopen { ws.connection_handler = Slanger::Config.socket_handler.new ws }
|
27
|
+
ws.onopen { |handshake| ws.connection_handler = Slanger::Config.socket_handler.new ws, handshake }
|
28
28
|
ws.onmessage { |msg| ws.connection_handler.onmessage msg }
|
29
29
|
ws.onclose { ws.connection_handler.onclose }
|
30
30
|
end
|
data/lib/slanger/webhook.rb
CHANGED
@@ -13,15 +13,9 @@ module Slanger
|
|
13
13
|
digest = OpenSSL::Digest::SHA256.new
|
14
14
|
hmac = OpenSSL::HMAC.hexdigest(digest, Slanger::Config.secret, payload)
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
EM::HttpRequest.new(Slanger::Config.webhook_url).
|
20
|
-
post(body: payload, head: { "X-Pusher-Key" => Slanger::Config.app_key, "X-Pusher-Secret" => hmac }).
|
21
|
-
callback { f.resume }
|
22
|
-
# TODO: Exponentially backed off retries for errors
|
23
|
-
Fiber.yield
|
24
|
-
end.resume
|
16
|
+
EM::HttpRequest.new(Slanger::Config.webhook_url).
|
17
|
+
post(body: payload, head: { "X-Pusher-Key" => Slanger::Config.app_key, "X-Pusher-Secret" => hmac })
|
18
|
+
# TODO: Exponentially backed off retries for errors
|
25
19
|
end
|
26
20
|
|
27
21
|
extend self
|
data/slanger.rb
CHANGED
metadata
CHANGED
@@ -1,100 +1,88 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slanger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.8
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Stevie Graham
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-03-20 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: eventmachine
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
19
|
+
version: 1.0.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
|
-
version: 0.
|
26
|
+
version: 1.0.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: em-hiredis
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.
|
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
|
-
version: 0.
|
40
|
+
version: 0.2.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: em-websocket
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
47
|
+
version: 0.5.0
|
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
|
61
|
-
version: 0.
|
54
|
+
version: 0.5.0
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rack
|
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: 1.4.5
|
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
|
77
|
-
version:
|
68
|
+
version: 1.4.5
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rack-fiber_pool
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ~>
|
84
74
|
- !ruby/object:Gem::Version
|
85
|
-
version: 0.9.
|
75
|
+
version: 0.9.2
|
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
|
93
|
-
version: 0.9.
|
82
|
+
version: 0.9.2
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: signature
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ~>
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ~>
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -110,7 +97,6 @@ dependencies:
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: activesupport
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - ~>
|
116
102
|
- !ruby/object:Gem::Version
|
@@ -118,7 +104,6 @@ dependencies:
|
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - ~>
|
124
109
|
- !ruby/object:Gem::Version
|
@@ -126,7 +111,6 @@ dependencies:
|
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: glamazon
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
115
|
- - ~>
|
132
116
|
- !ruby/object:Gem::Version
|
@@ -134,7 +118,6 @@ dependencies:
|
|
134
118
|
type: :runtime
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
122
|
- - ~>
|
140
123
|
- !ruby/object:Gem::Version
|
@@ -142,7 +125,6 @@ dependencies:
|
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: sinatra
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
129
|
- - ~>
|
148
130
|
- !ruby/object:Gem::Version
|
@@ -150,7 +132,6 @@ dependencies:
|
|
150
132
|
type: :runtime
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
136
|
- - ~>
|
156
137
|
- !ruby/object:Gem::Version
|
@@ -158,23 +139,20 @@ dependencies:
|
|
158
139
|
- !ruby/object:Gem::Dependency
|
159
140
|
name: thin
|
160
141
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
142
|
requirements:
|
163
143
|
- - ~>
|
164
144
|
- !ruby/object:Gem::Version
|
165
|
-
version: 1.
|
145
|
+
version: 1.6.0
|
166
146
|
type: :runtime
|
167
147
|
prerelease: false
|
168
148
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
149
|
requirements:
|
171
150
|
- - ~>
|
172
151
|
- !ruby/object:Gem::Version
|
173
|
-
version: 1.
|
152
|
+
version: 1.6.0
|
174
153
|
- !ruby/object:Gem::Dependency
|
175
154
|
name: em-http-request
|
176
155
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
156
|
requirements:
|
179
157
|
- - ~>
|
180
158
|
- !ruby/object:Gem::Version
|
@@ -182,7 +160,6 @@ dependencies:
|
|
182
160
|
type: :runtime
|
183
161
|
prerelease: false
|
184
162
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
163
|
requirements:
|
187
164
|
- - ~>
|
188
165
|
- !ruby/object:Gem::Version
|
@@ -190,39 +167,34 @@ dependencies:
|
|
190
167
|
- !ruby/object:Gem::Dependency
|
191
168
|
name: rspec
|
192
169
|
requirement: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
170
|
requirements:
|
195
171
|
- - ~>
|
196
172
|
- !ruby/object:Gem::Version
|
197
|
-
version:
|
173
|
+
version: 2.12.0
|
198
174
|
type: :development
|
199
175
|
prerelease: false
|
200
176
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
177
|
requirements:
|
203
178
|
- - ~>
|
204
179
|
- !ruby/object:Gem::Version
|
205
|
-
version:
|
180
|
+
version: 2.12.0
|
206
181
|
- !ruby/object:Gem::Dependency
|
207
182
|
name: pusher
|
208
183
|
requirement: !ruby/object:Gem::Requirement
|
209
|
-
none: false
|
210
184
|
requirements:
|
211
185
|
- - ~>
|
212
186
|
- !ruby/object:Gem::Version
|
213
|
-
version: 0.
|
187
|
+
version: 0.12.0
|
214
188
|
type: :development
|
215
189
|
prerelease: false
|
216
190
|
version_requirements: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
191
|
requirements:
|
219
192
|
- - ~>
|
220
193
|
- !ruby/object:Gem::Version
|
221
|
-
version: 0.
|
194
|
+
version: 0.12.0
|
222
195
|
- !ruby/object:Gem::Dependency
|
223
196
|
name: haml
|
224
197
|
requirement: !ruby/object:Gem::Requirement
|
225
|
-
none: false
|
226
198
|
requirements:
|
227
199
|
- - ~>
|
228
200
|
- !ruby/object:Gem::Version
|
@@ -230,7 +202,6 @@ dependencies:
|
|
230
202
|
type: :development
|
231
203
|
prerelease: false
|
232
204
|
version_requirements: !ruby/object:Gem::Requirement
|
233
|
-
none: false
|
234
205
|
requirements:
|
235
206
|
- - ~>
|
236
207
|
- !ruby/object:Gem::Version
|
@@ -238,23 +209,20 @@ dependencies:
|
|
238
209
|
- !ruby/object:Gem::Dependency
|
239
210
|
name: rake
|
240
211
|
requirement: !ruby/object:Gem::Requirement
|
241
|
-
none: false
|
242
212
|
requirements:
|
243
|
-
- -
|
213
|
+
- - '>='
|
244
214
|
- !ruby/object:Gem::Version
|
245
215
|
version: '0'
|
246
216
|
type: :development
|
247
217
|
prerelease: false
|
248
218
|
version_requirements: !ruby/object:Gem::Requirement
|
249
|
-
none: false
|
250
219
|
requirements:
|
251
|
-
- -
|
220
|
+
- - '>='
|
252
221
|
- !ruby/object:Gem::Version
|
253
222
|
version: '0'
|
254
223
|
- !ruby/object:Gem::Dependency
|
255
224
|
name: timecop
|
256
225
|
requirement: !ruby/object:Gem::Requirement
|
257
|
-
none: false
|
258
226
|
requirements:
|
259
227
|
- - ~>
|
260
228
|
- !ruby/object:Gem::Version
|
@@ -262,7 +230,6 @@ dependencies:
|
|
262
230
|
type: :development
|
263
231
|
prerelease: false
|
264
232
|
version_requirements: !ruby/object:Gem::Requirement
|
265
|
-
none: false
|
266
233
|
requirements:
|
267
234
|
- - ~>
|
268
235
|
- !ruby/object:Gem::Version
|
@@ -270,7 +237,6 @@ dependencies:
|
|
270
237
|
- !ruby/object:Gem::Dependency
|
271
238
|
name: webmock
|
272
239
|
requirement: !ruby/object:Gem::Requirement
|
273
|
-
none: false
|
274
240
|
requirements:
|
275
241
|
- - ~>
|
276
242
|
- !ruby/object:Gem::Version
|
@@ -278,7 +244,6 @@ dependencies:
|
|
278
244
|
type: :development
|
279
245
|
prerelease: false
|
280
246
|
version_requirements: !ruby/object:Gem::Requirement
|
281
|
-
none: false
|
282
247
|
requirements:
|
283
248
|
- - ~>
|
284
249
|
- !ruby/object:Gem::Version
|
@@ -286,19 +251,17 @@ dependencies:
|
|
286
251
|
- !ruby/object:Gem::Dependency
|
287
252
|
name: mocha
|
288
253
|
requirement: !ruby/object:Gem::Requirement
|
289
|
-
none: false
|
290
254
|
requirements:
|
291
255
|
- - ~>
|
292
256
|
- !ruby/object:Gem::Version
|
293
|
-
version: 0.
|
257
|
+
version: 0.13.2
|
294
258
|
type: :development
|
295
259
|
prerelease: false
|
296
260
|
version_requirements: !ruby/object:Gem::Requirement
|
297
|
-
none: false
|
298
261
|
requirements:
|
299
262
|
- - ~>
|
300
263
|
- !ruby/object:Gem::Version
|
301
|
-
version: 0.
|
264
|
+
version: 0.13.2
|
302
265
|
description: A websocket service compatible with Pusher libraries
|
303
266
|
email: sjtgraham@mac.com
|
304
267
|
executables:
|
@@ -326,26 +289,26 @@ files:
|
|
326
289
|
- bin/slanger
|
327
290
|
homepage: http://github.com/stevegraham/slanger
|
328
291
|
licenses: []
|
292
|
+
metadata: {}
|
329
293
|
post_install_message:
|
330
294
|
rdoc_options: []
|
331
295
|
require_paths:
|
332
296
|
- .
|
333
297
|
required_ruby_version: !ruby/object:Gem::Requirement
|
334
|
-
none: false
|
335
298
|
requirements:
|
336
|
-
- -
|
299
|
+
- - '>='
|
337
300
|
- !ruby/object:Gem::Version
|
338
301
|
version: 1.9.2
|
339
302
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
340
|
-
none: false
|
341
303
|
requirements:
|
342
|
-
- -
|
304
|
+
- - '>='
|
343
305
|
- !ruby/object:Gem::Version
|
344
306
|
version: '0'
|
345
307
|
requirements: []
|
346
308
|
rubyforge_project:
|
347
|
-
rubygems_version:
|
309
|
+
rubygems_version: 2.0.3
|
348
310
|
signing_key:
|
349
|
-
specification_version:
|
311
|
+
specification_version: 4
|
350
312
|
summary: A websocket service compatible with Pusher libraries
|
351
313
|
test_files: []
|
314
|
+
has_rdoc:
|