sinatra-rocketio 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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: