sinatra-rocketio 0.2.6 → 0.3.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/History.txt +4 -0
- data/README.md +11 -19
- data/Rakefile +8 -8
- data/lib/sinatra-rocketio/client_info.rb +1 -1
- data/lib/sinatra-rocketio/rocketio.rb +4 -4
- data/lib/sinatra-rocketio/version.rb +1 -1
- data/rocketio.js +6 -5
- data/rocketio.min.js +3 -3
- data/sample/classic_style/config.ru +2 -4
- data/sample/modular_style/config.ru +2 -4
- data/sinatra-rocketio.gemspec +2 -2
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b79c54a4625daf478248080e3030bd3c616b6fa
|
4
|
+
data.tar.gz: fc17414c382d82e9d489c440ffa4b38aeafd5763
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 819632a1f9940f5d01249518dbde89b6e660ad6f9fb1973a1f5a2d0a3d728ea31f7a3fad1926de32c41a4f11588e84729e16ab7b578e4535ee460b7537dd2d3e
|
7
|
+
data.tar.gz: 729e355f593282179ff61436757cddd0449a66e371c3def725d416dd403c275d3bd07694c2350b52fc37fdda0730f06757c2ff2f90236bb0cb060837c0c6aab2
|
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,7 @@ sinatra-rocketio
|
|
4
4
|
* Node.js like I/O plugin for Sinatra.
|
5
5
|
* Automatically selects from Comet and WebSocket.
|
6
6
|
* https://github.com/shokai/sinatra-rocketio
|
7
|
-
* https://github.com/shokai/sinatra-rocketio/wiki
|
7
|
+
* [Wiki](https://github.com/shokai/sinatra-rocketio/wiki)
|
8
8
|
* [Handle 10K+ clients on 1 process](https://github.com/shokai/sinatra-websocketio/wiki/C10K)
|
9
9
|
|
10
10
|
|
@@ -40,8 +40,11 @@ run Sinatra::Application
|
|
40
40
|
```ruby
|
41
41
|
io = Sinatra::RocketIO
|
42
42
|
|
43
|
-
io.
|
44
|
-
|
43
|
+
io.on :connect do |client|
|
44
|
+
puts "new client available - <#{client.session}> type:#{client.type} from:#{client.address}"
|
45
|
+
io.push :temperature, 35 # to all clients
|
46
|
+
io.push :light, {:value => 150}, {:to => client.session} # to specific client
|
47
|
+
end
|
45
48
|
```
|
46
49
|
|
47
50
|
Client Side
|
@@ -76,7 +79,7 @@ Server Side
|
|
76
79
|
|
77
80
|
```ruby
|
78
81
|
io.on :chat do |data, client|
|
79
|
-
puts "#{data['name']} : #{data['message']} <#{client.session}> type:#{client.type}"
|
82
|
+
puts "#{data['name']} : #{data['message']} <#{client.session}> type:#{client.type} address:#{client.address}"
|
80
83
|
end
|
81
84
|
## => "shokai : hello <12abcde345f6g7h8ijk> type:websocket"
|
82
85
|
```
|
@@ -95,7 +98,7 @@ Server Side
|
|
95
98
|
|
96
99
|
```ruby
|
97
100
|
io.on :connect do |client|
|
98
|
-
puts "new client <#{client.session}> type:#{client.type}"
|
101
|
+
puts "new client <#{client.session}> type:#{client.type} address:#{client.address}"
|
99
102
|
io.push :hello, "hello new client!!"
|
100
103
|
end
|
101
104
|
|
@@ -194,20 +197,9 @@ configure with ENV variables.
|
|
194
197
|
disable comet and enable websocket on port 9000.
|
195
198
|
|
196
199
|
|
197
|
-
Sample
|
198
|
-
|
199
|
-
|
200
|
-
### hello world
|
201
|
-
- https://github.com/shokai/rocketio-hello-world
|
202
|
-
|
203
|
-
|
204
|
-
### chat app
|
205
|
-
- https://github.com/shokai/sinatra-rocketio/tree/master/sample
|
206
|
-
- https://github.com/shokai/rocketio-chat-sample
|
207
|
-
|
208
|
-
|
209
|
-
### arduino integration
|
210
|
-
- https://github.com/shokai/rocketio-arduino-sample
|
200
|
+
Sample Apps
|
201
|
+
-----------
|
202
|
+
- https://github.com/shokai/sinatra-rocketio/wiki/Sample-Apps
|
211
203
|
|
212
204
|
|
213
205
|
JavaScript Lib for browser
|
data/Rakefile
CHANGED
@@ -5,6 +5,14 @@ Rake::TestTask.new do |t|
|
|
5
5
|
t.pattern = "test/test_*.rb"
|
6
6
|
end
|
7
7
|
|
8
|
+
desc "Start test server"
|
9
|
+
task :test_server do
|
10
|
+
require File.expand_path 'test/app', File.dirname(__FILE__)
|
11
|
+
App.start
|
12
|
+
end
|
13
|
+
|
14
|
+
task :default => :test
|
15
|
+
|
8
16
|
desc "generate JavaScript lib for browser"
|
9
17
|
task :jslib do
|
10
18
|
dest = "rocketio.js"
|
@@ -32,11 +40,3 @@ task :jslib do
|
|
32
40
|
system "uglifyjs #{dest} >> #{dest_min}"
|
33
41
|
puts " => #{dest_min}"
|
34
42
|
end
|
35
|
-
|
36
|
-
desc "Start test server"
|
37
|
-
task :test_server do
|
38
|
-
require File.expand_path 'test/app', File.dirname(__FILE__)
|
39
|
-
App.start
|
40
|
-
end
|
41
|
-
|
42
|
-
task :default => :test
|
@@ -39,9 +39,9 @@ Sinatra::RocketIO.once :start do
|
|
39
39
|
Sinatra::CometIO.on :* do |event_name, *args|
|
40
40
|
event_name = :__connect if event_name == :connect
|
41
41
|
if args.size > 1
|
42
|
-
Sinatra::RocketIO.emit event_name, args[0], Sinatra::RocketIO::ClientInfo.new(:session => args[1], :channel => Sinatra::RocketIO.channels[args[1]], :type => :comet)
|
42
|
+
Sinatra::RocketIO.emit event_name, args[0], Sinatra::RocketIO::ClientInfo.new(:session => args[1], :address => sessions[args[1]][:remote_addr], :channel => Sinatra::RocketIO.channels[args[1]], :type => :comet)
|
43
43
|
else
|
44
|
-
Sinatra::RocketIO.emit event_name, Sinatra::RocketIO::ClientInfo.new(:session => args[0], :channel => Sinatra::RocketIO.channels[args[0]], :type => :comet)
|
44
|
+
Sinatra::RocketIO.emit event_name, Sinatra::RocketIO::ClientInfo.new(:session => args[0], :address => sessions[args[0]][:remote_addr], :channel => Sinatra::RocketIO.channels[args[0]], :type => :comet)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -49,9 +49,9 @@ Sinatra::RocketIO.once :start do
|
|
49
49
|
Sinatra::WebSocketIO.on :* do |event_name, *args|
|
50
50
|
event_name = :__connect if event_name == :connect
|
51
51
|
if args.size > 1
|
52
|
-
Sinatra::RocketIO.emit event_name, args[0], Sinatra::RocketIO::ClientInfo.new(:session => args[1], :channel => Sinatra::RocketIO.channels[args[1]], :type => :websocket)
|
52
|
+
Sinatra::RocketIO.emit event_name, args[0], Sinatra::RocketIO::ClientInfo.new(:session => args[1], :address => sessions[args[1]][:remote_addr], :channel => Sinatra::RocketIO.channels[args[1]], :type => :websocket)
|
53
53
|
else
|
54
|
-
Sinatra::RocketIO.emit event_name, Sinatra::RocketIO::ClientInfo.new(:session => args[0], :channel => Sinatra::RocketIO.channels[args[0]], :type => :websocket)
|
54
|
+
Sinatra::RocketIO.emit event_name, Sinatra::RocketIO::ClientInfo.new(:session => args[0], :address => sessions[args[0]][:remote_addr], :channel => Sinatra::RocketIO.channels[args[0]], :type => :websocket)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
data/rocketio.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
// RocketIO.js v0.2.
|
1
|
+
// RocketIO.js v0.2.6 (websocketio:v0.3.3, cometio:v0.5.8)
|
2
2
|
// https://github.com/shokai/sinatra-rocketio
|
3
|
-
// (c)
|
3
|
+
// (c) 2013 Sho Hashimoto <hashimoto@shokai.org>
|
4
4
|
// The MIT License
|
5
5
|
var RocketIO = function(opts){
|
6
6
|
new EventEmitter().apply(this);
|
@@ -148,7 +148,7 @@ var CometIO = function(url, opts){
|
|
148
148
|
if(!running) return;
|
149
149
|
$.ajax(
|
150
150
|
{
|
151
|
-
url : self.url,
|
151
|
+
url : self.url+"?"+(new Date()-0),
|
152
152
|
data : {session : self.session},
|
153
153
|
success : function(data_arr){
|
154
154
|
if(data_arr !== null && typeof data_arr == "object" && !!data_arr.length){
|
@@ -198,13 +198,14 @@ var WebSocketIO = function(url, opts){
|
|
198
198
|
var url = self.session ? self.url+"/session="+self.session : self.url;
|
199
199
|
self.websocket = new WebSocket(url);
|
200
200
|
self.websocket.onmessage = function(e){
|
201
|
+
var data_ = null;
|
201
202
|
try{
|
202
|
-
|
203
|
-
self.emit(data_.type, data_.data);
|
203
|
+
data_ = JSON.parse(e.data);
|
204
204
|
}
|
205
205
|
catch(e){
|
206
206
|
self.emit("error", "WebSocketIO data parse error");
|
207
207
|
}
|
208
|
+
if(!!data_) self.emit(data_.type, data_.data);
|
208
209
|
};
|
209
210
|
self.websocket.onclose = function(){
|
210
211
|
if(self.connecting){
|
data/rocketio.min.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
// RocketIO.js v0.2.
|
1
|
+
// RocketIO.js v0.2.6 (websocketio:v0.3.3, cometio:v0.5.8)
|
2
2
|
// https://github.com/shokai/sinatra-rocketio
|
3
|
-
// (c)
|
3
|
+
// (c) 2013 Sho Hashimoto <hashimoto@shokai.org>
|
4
4
|
// The MIT License
|
5
|
-
var RocketIO=function(opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.type=opts.type||null;this.session=opts.session||null;this.channel=null;if(typeof opts.channel!=="undefined"&&opts.channel!==null){this.channel=""+opts.channel}var setting={};this.io=null;var self=this;var ws_close_timer=null;self.on("__connect",function(session_id){self.session=session_id;self.io.push("__channel_id",self.channel);self.emit("connect")});this.connect=function(url){if(typeof url==="string"){$.getJSON(url+"/rocketio/settings",function(res){setting=res;connect_io()});return self}else{return connect_io()}};var connect_io=function(){self.io=function(){if(self.type==="comet")return;if(typeof WebSocketIO!=="function")return;var io=new WebSocketIO;if(typeof setting.websocket==="string")io.url=setting.websocket;io.session=self.session;return io.connect()}()||function(){if(typeof CometIO!=="function")return;var io=new CometIO;if(typeof setting.comet==="string")io.url=setting.comet;io.session=self.session;return io.connect()}();if(typeof self.io==="undefined"){setTimeout(function(){self.emit("error","WebSocketIO and CometIO are not available")},100);return self}if(self.io.url.match(/^ws:\/\/.+/))self.type="websocket";else if(self.io.url.match(/cometio/))self.type="comet";else self.type="unknown";self.io.on("*",function(event_name,args){if(event_name==="connect")event_name="__connect";self.emit(event_name,args)});ws_close_timer=setTimeout(function(){self.close();self.type="comet";connect_io()},3e3);self.once("connect",function(){if(ws_close_timer)clearTimeout(ws_close_timer);ws_close_timer=null});return self};this.close=function(){self.io.close()};this.push=function(type,data){self.io.push(type,data)}};var CometIO=function(url,opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.url=url||"";this.session=opts.session||null;var running=false;var self=this;var post_queue=[];var flush=function(){if(!running||post_queue.length<1)return;var post_data={json:JSON.stringify({session:self.session,events:post_queue})};$.ajax({url:self.url,data:post_data,success:function(data){},error:function(req,stat,e){self.emit("error","CometIO push error")},complete:function(e){},type:"POST",dataType:"json",timeout:1e4});post_queue=[]};setInterval(flush,1e3);this.push=function(type,data){if(!running||!self.session){self.emit("error","CometIO not connected");return}post_queue.push({type:type,data:data})};this.connect=function(){if(running)return self;self.on("__session_id",function(session){self.session=session;self.emit("connect",self.session)});running=true;get();return self};this.close=function(){running=false;self.removeListener("__session_id")};var get=function(){if(!running)return;$.ajax({url:self.url,data:{session:self.session},success:function(data_arr){if(data_arr!==null&&typeof data_arr=="object"&&!!data_arr.length){for(var i=0;i<data_arr.length;i++){var data=data_arr[i];if(data)self.emit(data.type,data.data)}}get()},error:function(req,stat,e){self.emit("error","CometIO get error");setTimeout(get,1e4)},complete:function(e){},type:"GET",dataType:"json",timeout:13e4})}};var WebSocketIO=function(url,opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.url=url||"";this.session=opts.session||null;this.websocket=null;this.connecting=false;var reconnect_timer_id=null;var running=false;var self=this;self.on("__session_id",function(session_id){self.session=session_id;self.emit("connect",self.session)});this.connect=function(){if(typeof WebSocket==="undefined"){self.emit("error","websocket not exists in this browser");return null}self.running=true;var url=self.session?self.url+"/session="+self.session:self.url;self.websocket=new WebSocket(url);self.websocket.onmessage=function(e){
|
5
|
+
var RocketIO=function(opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.type=opts.type||null;this.session=opts.session||null;this.channel=null;if(typeof opts.channel!=="undefined"&&opts.channel!==null){this.channel=""+opts.channel}var setting={};this.io=null;var self=this;var ws_close_timer=null;self.on("__connect",function(session_id){self.session=session_id;self.io.push("__channel_id",self.channel);self.emit("connect")});this.connect=function(url){if(typeof url==="string"){$.getJSON(url+"/rocketio/settings",function(res){setting=res;connect_io()});return self}else{return connect_io()}};var connect_io=function(){self.io=function(){if(self.type==="comet")return;if(typeof WebSocketIO!=="function")return;var io=new WebSocketIO;if(typeof setting.websocket==="string")io.url=setting.websocket;io.session=self.session;return io.connect()}()||function(){if(typeof CometIO!=="function")return;var io=new CometIO;if(typeof setting.comet==="string")io.url=setting.comet;io.session=self.session;return io.connect()}();if(typeof self.io==="undefined"){setTimeout(function(){self.emit("error","WebSocketIO and CometIO are not available")},100);return self}if(self.io.url.match(/^ws:\/\/.+/))self.type="websocket";else if(self.io.url.match(/cometio/))self.type="comet";else self.type="unknown";self.io.on("*",function(event_name,args){if(event_name==="connect")event_name="__connect";self.emit(event_name,args)});ws_close_timer=setTimeout(function(){self.close();self.type="comet";connect_io()},3e3);self.once("connect",function(){if(ws_close_timer)clearTimeout(ws_close_timer);ws_close_timer=null});return self};this.close=function(){self.io.close()};this.push=function(type,data){self.io.push(type,data)}};var CometIO=function(url,opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.url=url||"";this.session=opts.session||null;var running=false;var self=this;var post_queue=[];var flush=function(){if(!running||post_queue.length<1)return;var post_data={json:JSON.stringify({session:self.session,events:post_queue})};$.ajax({url:self.url,data:post_data,success:function(data){},error:function(req,stat,e){self.emit("error","CometIO push error")},complete:function(e){},type:"POST",dataType:"json",timeout:1e4});post_queue=[]};setInterval(flush,1e3);this.push=function(type,data){if(!running||!self.session){self.emit("error","CometIO not connected");return}post_queue.push({type:type,data:data})};this.connect=function(){if(running)return self;self.on("__session_id",function(session){self.session=session;self.emit("connect",self.session)});running=true;get();return self};this.close=function(){running=false;self.removeListener("__session_id")};var get=function(){if(!running)return;$.ajax({url:self.url+"?"+(new Date-0),data:{session:self.session},success:function(data_arr){if(data_arr!==null&&typeof data_arr=="object"&&!!data_arr.length){for(var i=0;i<data_arr.length;i++){var data=data_arr[i];if(data)self.emit(data.type,data.data)}}get()},error:function(req,stat,e){self.emit("error","CometIO get error");setTimeout(get,1e4)},complete:function(e){},type:"GET",dataType:"json",timeout:13e4})}};var WebSocketIO=function(url,opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.url=url||"";this.session=opts.session||null;this.websocket=null;this.connecting=false;var reconnect_timer_id=null;var running=false;var self=this;self.on("__session_id",function(session_id){self.session=session_id;self.emit("connect",self.session)});this.connect=function(){if(typeof WebSocket==="undefined"){self.emit("error","websocket not exists in this browser");return null}self.running=true;var url=self.session?self.url+"/session="+self.session:self.url;self.websocket=new WebSocket(url);self.websocket.onmessage=function(e){var data_=null;try{data_=JSON.parse(e.data)}catch(e){self.emit("error","WebSocketIO data parse error")}if(!!data_)self.emit(data_.type,data_.data)};self.websocket.onclose=function(){if(self.connecting){self.connecting=false;self.emit("disconnect")}if(self.running){reconnect_timer_id=setTimeout(self.connect,1e4)}};self.websocket.onopen=function(){self.connecting=true};return self};this.close=function(){clearTimeout(reconnect_timer_id);self.running=false;self.websocket.close()};this.push=function(type,data){if(!self.connecting){self.emit("error","websocket not connected");return}self.websocket.send(JSON.stringify({type:type,data:data,session:self.session}))}};var EventEmitter=function(){var self=this;this.apply=function(target,prefix){if(!prefix)prefix="";for(var func in self){if(self.hasOwnProperty(func)&&func!=="apply"){target[prefix+func]=this[func]}}};this.__events=new Array;this.on=function(type,listener,opts){if(typeof listener!=="function")return;var event_id=self.__events.length>0?1+self.__events[self.__events.length-1].id:0;var params={id:event_id,type:type,listener:listener};for(i in opts){if(!params[i])params[i]=opts[i]}self.__events.push(params);return event_id};this.once=function(type,listener){self.on(type,listener,{once:true})};this.emit=function(type,data){for(var i=0;i<self.__events.length;i++){var e=self.__events[i];switch(e.type){case type:e.listener(data);if(e.once)e.type=null;break;case"*":e.listener(type,data);if(e.once)e.type=null;break}}self.removeListener()};this.removeListener=function(id_or_type){for(var i=self.__events.length-1;i>=0;i--){var e=self.__events[i];switch(typeof id_or_type){case"number":if(e.id===id_or_type)self.__events.splice(i,1);break;case"string":case"object":if(e.type===id_or_type)self.__events.splice(i,1);break}}}};if(typeof module!=="undefined"&&typeof module.exports!=="undefined"){module.exports=EventEmitter}
|
@@ -1,11 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
|
3
|
-
Bundler.require
|
2
|
+
$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)
|
4
3
|
require 'sinatra'
|
5
4
|
if development?
|
6
5
|
$stdout.sync = true
|
7
6
|
require 'sinatra/reloader'
|
8
|
-
$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)
|
9
7
|
end
|
10
8
|
require 'sinatra/rocketio'
|
11
9
|
require 'haml'
|
@@ -14,7 +12,7 @@ require File.dirname(__FILE__)+'/main'
|
|
14
12
|
|
15
13
|
set :haml, :escape_html => true
|
16
14
|
set :cometio, :timeout => 120, :post_interval => 2, :allow_crossdomain => true
|
17
|
-
set :websocketio, :port => (ENV['WS_PORT'] ||
|
15
|
+
set :websocketio, :port => (ENV['WS_PORT'] || 9000).to_i
|
18
16
|
set :rocketio, :comet => true, :websocket => true
|
19
17
|
|
20
18
|
case RUBY_PLATFORM
|
@@ -1,12 +1,10 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
|
3
|
-
Bundler.require
|
2
|
+
$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)
|
4
3
|
require 'sinatra'
|
5
4
|
require 'sinatra/base'
|
6
5
|
if development?
|
7
6
|
$stdout.sync = true
|
8
7
|
require 'sinatra/reloader'
|
9
|
-
$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)
|
10
8
|
end
|
11
9
|
require 'sinatra/rocketio'
|
12
10
|
require 'haml'
|
@@ -15,7 +13,7 @@ require File.dirname(__FILE__)+'/main'
|
|
15
13
|
|
16
14
|
set :haml, :escape_html => true
|
17
15
|
set :cometio, :timeout => 120, :post_interval => 2, :allow_crossdomain => true
|
18
|
-
set :websocketio, :port => (ENV['WS_PORT'] ||
|
16
|
+
set :websocketio, :port => (ENV['WS_PORT'] || 9000).to_i
|
19
17
|
set :rocketio, :comet => true, :websocket => true
|
20
18
|
|
21
19
|
case RUBY_PLATFORM
|
data/sinatra-rocketio.gemspec
CHANGED
@@ -25,8 +25,8 @@ Gem::Specification.new do |gem|
|
|
25
25
|
gem.add_development_dependency "httparty"
|
26
26
|
gem.add_development_dependency "json"
|
27
27
|
|
28
|
-
gem.add_dependency "sinatra-cometio", ">= 0.5.
|
29
|
-
gem.add_dependency "sinatra-websocketio", ">= 0.3.
|
28
|
+
gem.add_dependency "sinatra-cometio", ">= 0.5.9"
|
29
|
+
gem.add_dependency "sinatra-websocketio", ">= 0.3.7"
|
30
30
|
gem.add_dependency "sinatra"
|
31
31
|
gem.add_dependency "eventmachine", ">= 1.0.0"
|
32
32
|
gem.add_dependency "event_emitter", ">= 0.2.5"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-rocketio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sho Hashimoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -128,28 +128,28 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - '>='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.5.
|
131
|
+
version: 0.5.9
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '>='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.5.
|
138
|
+
version: 0.5.9
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: sinatra-websocketio
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - '>='
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0.3.
|
145
|
+
version: 0.3.7
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - '>='
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.3.
|
152
|
+
version: 0.3.7
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: sinatra
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -277,7 +277,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
277
277
|
version: '0'
|
278
278
|
requirements: []
|
279
279
|
rubyforge_project:
|
280
|
-
rubygems_version: 2.0.
|
280
|
+
rubygems_version: 2.0.5
|
281
281
|
signing_key:
|
282
282
|
specification_version: 4
|
283
283
|
summary: WebSocket/Comet IO plugin for Sinatra
|
@@ -290,4 +290,3 @@ test_files:
|
|
290
290
|
- test/test_push_multi_client.rb
|
291
291
|
- test/test_rocketio.rb
|
292
292
|
- test/test_settings.rb
|
293
|
-
has_rdoc:
|