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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f749b52c9e6cdf5d94b913387b7ed435df575a21
4
- data.tar.gz: 26bb924f8435df3c0be29d0cd9cbfe0fe5551f3d
3
+ metadata.gz: 4b79c54a4625daf478248080e3030bd3c616b6fa
4
+ data.tar.gz: fc17414c382d82e9d489c440ffa4b38aeafd5763
5
5
  SHA512:
6
- metadata.gz: 32782a0c0c99665694a5f8ff36af55584b610db812ea7a365e2ff218ea27ae6d6423153e31e8f03254b25ed6f6db7501801800d54038d2eb4158497d1d073282
7
- data.tar.gz: c3f910f932c95ebc2806300cfd9f846ad79ad562809a3ae4001efd4961e5cbb29acfaacb8de457f156e6afd49485ee3bce9fd536b23c30f8b571f39c7cdded9c
6
+ metadata.gz: 819632a1f9940f5d01249518dbde89b6e660ad6f9fb1973a1f5a2d0a3d728ea31f7a3fad1926de32c41a4f11588e84729e16ab7b578e4535ee460b7537dd2d3e
7
+ data.tar.gz: 729e355f593282179ff61436757cddd0449a66e371c3def725d416dd403c275d3bd07694c2350b52fc37fdda0730f06757c2ff2f90236bb0cb060837c0c6aab2
@@ -1,3 +1,7 @@
1
+ === 0.3.0 2013-10-02
2
+
3
+ * get client address with Sinatra::RocketIO::ClientInfo#address
4
+
1
5
  === 0.2.6 2013-05-27
2
6
 
3
7
  * JS Lib for browser
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.push :temperature, 35 # to all clients
44
- io.push :light, {:value => 150}, {:to => session_id} # to specific client
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 App
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
@@ -4,7 +4,7 @@ module Sinatra
4
4
  module RocketIO
5
5
  class ClientInfo < Hashie::Mash
6
6
  def to_s
7
- "session=\"#{session}\" type=\"#{type}\" channel=\"#{channel}\""
7
+ %Q{address="#{address}" session="#{session}" type="#{type}" channel="#{channel}"}
8
8
  end
9
9
  end
10
10
  end
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module RocketIO
3
- VERSION = "0.2.6"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -1,6 +1,6 @@
1
- // RocketIO.js v0.2.5 (websocketio:v0.3.1, cometio:v0.5.7)
1
+ // RocketIO.js v0.2.6 (websocketio:v0.3.3, cometio:v0.5.8)
2
2
  // https://github.com/shokai/sinatra-rocketio
3
- // (c) 2012-2013 Sho Hashimoto <hashimoto@shokai.org>
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
- var data_ = JSON.parse(e.data);
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){
@@ -1,5 +1,5 @@
1
- // RocketIO.js v0.2.5 (websocketio:v0.3.1, cometio:v0.5.7)
1
+ // RocketIO.js v0.2.6 (websocketio:v0.3.3, cometio:v0.5.8)
2
2
  // https://github.com/shokai/sinatra-rocketio
3
- // (c) 2012-2013 Sho Hashimoto <hashimoto@shokai.org>
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){try{var data_=JSON.parse(e.data);self.emit(data_.type,data_.data)}catch(e){self.emit("error","WebSocketIO data parse error")}};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}
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
- require 'bundler/setup'
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'] || 8080).to_i
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
- require 'bundler/setup'
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'] || 8080).to_i
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
@@ -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.6"
29
- gem.add_dependency "sinatra-websocketio", ">= 0.3.0"
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.2.6
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-05-26 00:00:00.000000000 Z
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.6
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.6
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.0
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.0
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.3
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: