sinatra-cometio 0.1.4 → 0.1.5
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.
- data/Gemfile +2 -0
- data/History.txt +4 -0
- data/README.md +10 -0
- data/Rakefile +7 -0
- data/lib/sinatra-cometio/version.rb +1 -1
- data/sample/views/index.haml +1 -0
- data/test/app.rb +57 -0
- data/test/app/config.ru +10 -0
- data/test/app/main.rb +27 -0
- data/test/test_cometio.rb +99 -0
- data/test/test_helper.rb +12 -0
- metadata +13 -3
data/Gemfile
CHANGED
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -140,6 +140,16 @@ chat app
|
|
140
140
|
- https://github.com/shokai/sinatra-cometio/tree/master/sample
|
141
141
|
|
142
142
|
|
143
|
+
Test
|
144
|
+
----
|
145
|
+
|
146
|
+
% gem install bundler
|
147
|
+
% bundle install
|
148
|
+
% export PORT=5000
|
149
|
+
% export PID_FILE=/tmp/sinatra-cometio-test.pid
|
150
|
+
% rake test
|
151
|
+
|
152
|
+
|
143
153
|
Contributing
|
144
154
|
------------
|
145
155
|
1. Fork it
|
data/Rakefile
CHANGED
data/sample/views/index.haml
CHANGED
data/test/app.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
class App
|
2
|
+
|
3
|
+
def self.running
|
4
|
+
@running ? true : false
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.port
|
8
|
+
ENV['PORT'] || 5000
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.cometio_url
|
12
|
+
"http://localhost:#{port}/cometio/io"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.pid_file
|
16
|
+
ENV['PID_FILE'] || "/tmp/sinatra-cometio-testapp.pid"
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.app_dir
|
20
|
+
File.expand_path 'app', File.dirname(__FILE__)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.pid
|
24
|
+
return unless @running
|
25
|
+
File.open(pid_file) do |f|
|
26
|
+
pid = f.gets.strip.to_i
|
27
|
+
return pid if pid > 0
|
28
|
+
end
|
29
|
+
return
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.start
|
33
|
+
return if @running
|
34
|
+
File.delete pid_file if File.exists? pid_file
|
35
|
+
Thread.new do
|
36
|
+
IO::popen "cd #{app_dir} && PID_FILE=#{pid_file} rackup config.ru -p #{port} > /dev/null 2>&1"
|
37
|
+
end
|
38
|
+
@running = true
|
39
|
+
100.times do
|
40
|
+
if File.exists? pid_file
|
41
|
+
sleep 1
|
42
|
+
return true
|
43
|
+
end
|
44
|
+
sleep 0.1
|
45
|
+
end
|
46
|
+
@running = false
|
47
|
+
return false
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.stop
|
51
|
+
return unless @running
|
52
|
+
system "kill #{pid}"
|
53
|
+
File.delete pid_file if File.exists? pid_file
|
54
|
+
@running = false
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
data/test/app/config.ru
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
Bundler.require
|
4
|
+
$stdout.sync = true
|
5
|
+
$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)
|
6
|
+
require 'sinatra'
|
7
|
+
require 'sinatra/cometio'
|
8
|
+
require File.dirname(__FILE__)+'/main'
|
9
|
+
|
10
|
+
run Sinatra::Application
|
data/test/app/main.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
pid_file = ENV['PID_FILE'] || "/tmp/sinatra-cometio-test-pid"
|
2
|
+
File.open(pid_file, "w+") do |f|
|
3
|
+
f.write Process.pid.to_s
|
4
|
+
end
|
5
|
+
|
6
|
+
get '/' do
|
7
|
+
"sinatra-cometio v#{SinatraCometIO::VERSION}"
|
8
|
+
end
|
9
|
+
|
10
|
+
CometIO.on :connect do |session|
|
11
|
+
puts "new client <#{session}>"
|
12
|
+
end
|
13
|
+
|
14
|
+
CometIO.on :disconnect do |session|
|
15
|
+
puts "disconnect client <#{session}>"
|
16
|
+
end
|
17
|
+
|
18
|
+
CometIO.on :broadcast do |data, from|
|
19
|
+
puts from
|
20
|
+
puts "broadcast <#{from}> - #{data.to_json}"
|
21
|
+
push :broadcast, data
|
22
|
+
end
|
23
|
+
|
24
|
+
CometIO.on :message do |data, from|
|
25
|
+
puts "message <#{from}> - #{data.to_json}"
|
26
|
+
push :message, data, :to => data['to']
|
27
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require File.expand_path 'test_helper', File.dirname(__FILE__)
|
2
|
+
|
3
|
+
class TestCometio < MiniTest::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
App.start
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
App.stop
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_simple
|
14
|
+
client = CometIO::Client.new(App.cometio_url).connect
|
15
|
+
post_data = {:time => Time.now.to_s, :msg => 'hello!!'}
|
16
|
+
res = nil
|
17
|
+
client.on :broadcast do |data|
|
18
|
+
res = data
|
19
|
+
end
|
20
|
+
|
21
|
+
client.on :connect do |session|
|
22
|
+
push :broadcast, post_data
|
23
|
+
end
|
24
|
+
|
25
|
+
30.times do
|
26
|
+
break if res != nil
|
27
|
+
sleep 0.1
|
28
|
+
end
|
29
|
+
assert res != nil, 'server not respond'
|
30
|
+
assert res["time"] == post_data[:time]
|
31
|
+
assert res["msg"] == post_data[:msg]
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_client_to_client2
|
35
|
+
## client --> server --> client2
|
36
|
+
|
37
|
+
client = CometIO::Client.new(App.cometio_url).connect
|
38
|
+
post_data = {:time => Time.now.to_s, :msg => 'hello!!', :to => nil}
|
39
|
+
res = nil
|
40
|
+
client.on :message do |data|
|
41
|
+
res = data
|
42
|
+
end
|
43
|
+
|
44
|
+
res2 = nil
|
45
|
+
client.on :connect do |session|
|
46
|
+
client2 = CometIO::Client.new(App.cometio_url).connect
|
47
|
+
client2.on :connect do |session2|
|
48
|
+
post_data['to'] = session2
|
49
|
+
client.push :message, post_data
|
50
|
+
end
|
51
|
+
client2.on :message do |data|
|
52
|
+
res2 = data
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
30.times do
|
57
|
+
break if res != nil
|
58
|
+
sleep 0.1
|
59
|
+
end
|
60
|
+
assert res2 != nil, 'server not respond'
|
61
|
+
assert res2["time"] == post_data[:time]
|
62
|
+
assert res2["msg"] == post_data[:msg]
|
63
|
+
assert res == nil
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
def test_broadcast
|
68
|
+
## client --> server --> client&client2
|
69
|
+
client = CometIO::Client.new(App.cometio_url).connect
|
70
|
+
post_data = {:time => Time.now.to_s, :msg => 'hello!!'}
|
71
|
+
res = nil
|
72
|
+
client.on :broadcast do |data|
|
73
|
+
res = data
|
74
|
+
end
|
75
|
+
|
76
|
+
res2 = nil
|
77
|
+
client.on :connect do |session|
|
78
|
+
client2 = CometIO::Client.new(App.cometio_url).connect
|
79
|
+
client2.on :connect do |session2|
|
80
|
+
client.push :broadcast, post_data
|
81
|
+
end
|
82
|
+
client2.on :broadcast do |data|
|
83
|
+
res2 = data
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
30.times do
|
88
|
+
break if res != nil
|
89
|
+
sleep 0.1
|
90
|
+
end
|
91
|
+
assert res != nil, 'server not respond'
|
92
|
+
assert res["time"] == post_data[:time]
|
93
|
+
assert res["msg"] == post_data[:msg]
|
94
|
+
assert res2 != nil
|
95
|
+
assert res2["time"] == post_data[:time]
|
96
|
+
assert res2["msg"] == post_data[:msg]
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'sinatra/cometio/client'
|
4
|
+
require File.expand_path 'app', File.dirname(__FILE__)
|
5
|
+
|
6
|
+
$:.unshift File.expand_path '../lib', File.dirname(__FILE__)
|
7
|
+
|
8
|
+
['SIGHUP', 'SIGINT', 'SIGKILL', 'SIGTERM'].each do |sig|
|
9
|
+
Kernel.trap sig do
|
10
|
+
App.stop
|
11
|
+
end
|
12
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-cometio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
@@ -155,6 +155,11 @@ files:
|
|
155
155
|
- sample/views/index.haml
|
156
156
|
- sample/views/main.scss
|
157
157
|
- sinatra-cometio.gemspec
|
158
|
+
- test/app.rb
|
159
|
+
- test/app/config.ru
|
160
|
+
- test/app/main.rb
|
161
|
+
- test/test_cometio.rb
|
162
|
+
- test/test_helper.rb
|
158
163
|
homepage: http://shokai.github.com/sinatra-cometio
|
159
164
|
licenses: []
|
160
165
|
post_install_message:
|
@@ -179,4 +184,9 @@ rubygems_version: 1.8.24
|
|
179
184
|
signing_key:
|
180
185
|
specification_version: 3
|
181
186
|
summary: Node.js like Comet I/O plugin for Sinatra.
|
182
|
-
test_files:
|
187
|
+
test_files:
|
188
|
+
- test/app.rb
|
189
|
+
- test/app/config.ru
|
190
|
+
- test/app/main.rb
|
191
|
+
- test/test_cometio.rb
|
192
|
+
- test/test_helper.rb
|