socky-server 0.4.1 → 0.5.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -4
- data/.travis.yml +6 -0
- data/CHANGELOG.md +11 -5
- data/Gemfile +2 -0
- data/README.md +47 -68
- data/Rakefile +5 -7
- data/config.ru +19 -0
- data/example/config.yml +4 -0
- data/lib/socky/server.rb +23 -0
- data/lib/socky/server/application.rb +51 -0
- data/lib/socky/server/channel.rb +30 -0
- data/lib/socky/server/channel/base.rb +80 -0
- data/lib/socky/server/channel/presence.rb +49 -0
- data/lib/socky/server/channel/private.rb +44 -0
- data/lib/socky/server/channel/public.rb +43 -0
- data/lib/socky/server/channel/stub.rb +17 -0
- data/lib/socky/server/config.rb +52 -0
- data/lib/socky/server/connection.rb +66 -0
- data/lib/socky/server/http.rb +95 -0
- data/lib/socky/server/logger.rb +24 -0
- data/lib/socky/server/message.rb +35 -0
- data/lib/socky/server/misc.rb +18 -0
- data/lib/socky/server/version.rb +5 -0
- data/lib/socky/server/websocket.rb +43 -0
- data/socky-server.gemspec +5 -7
- data/spec/fixtures/example_config.yml +3 -0
- data/spec/integration/ws_channels_spec.rb +144 -0
- data/spec/integration/ws_connection_spec.rb +48 -0
- data/spec/integration/ws_presence_spec.rb +118 -0
- data/spec/integration/ws_rights_spec.rb +133 -0
- data/spec/spec_helper.rb +24 -2
- data/spec/support/websocket_application.rb +14 -0
- data/spec/unit/socky/server/application_spec.rb +54 -0
- data/spec/unit/socky/server/config_spec.rb +50 -0
- data/spec/unit/socky/server/connection_spec.rb +67 -0
- data/spec/unit/socky/server/message_spec.rb +64 -0
- metadata +93 -126
- data/bin/socky +0 -5
- data/lib/em-websocket_hacks.rb +0 -15
- data/lib/socky.rb +0 -75
- data/lib/socky/connection.rb +0 -137
- data/lib/socky/connection/authentication.rb +0 -99
- data/lib/socky/connection/finders.rb +0 -67
- data/lib/socky/message.rb +0 -85
- data/lib/socky/misc.rb +0 -74
- data/lib/socky/net_request.rb +0 -27
- data/lib/socky/options.rb +0 -39
- data/lib/socky/options/config.rb +0 -79
- data/lib/socky/options/parser.rb +0 -93
- data/lib/socky/runner.rb +0 -95
- data/spec/em-websocket_spec.rb +0 -36
- data/spec/files/default.yml +0 -18
- data/spec/files/invalid.yml +0 -1
- data/spec/socky/connection/authentication_spec.rb +0 -183
- data/spec/socky/connection/finders_spec.rb +0 -188
- data/spec/socky/connection_spec.rb +0 -151
- data/spec/socky/message_spec.rb +0 -102
- data/spec/socky/misc_spec.rb +0 -74
- data/spec/socky/net_request_spec.rb +0 -42
- data/spec/socky/options/config_spec.rb +0 -72
- data/spec/socky/options/parser_spec.rb +0 -76
- data/spec/socky/options_spec.rb +0 -60
- data/spec/socky/runner_spec.rb +0 -88
- data/spec/socky_spec.rb +0 -89
- data/spec/support/stallion.rb +0 -96
data/spec/socky_spec.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Socky do
|
4
|
-
|
5
|
-
context "class" do
|
6
|
-
|
7
|
-
it "should have non-blank version" do
|
8
|
-
Socky::VERSION.should_not be_nil
|
9
|
-
end
|
10
|
-
it "should have options in hash form" do
|
11
|
-
Socky.options.should_not be_nil
|
12
|
-
Socky.options.class.should eql(Hash)
|
13
|
-
end
|
14
|
-
it "should allow to set options" do
|
15
|
-
Socky.options.should eql(Hash.new)
|
16
|
-
begin
|
17
|
-
Socky.options = {:key => :value}
|
18
|
-
Socky.options.should eql({:key => :value})
|
19
|
-
ensure
|
20
|
-
Socky.options = Hash.new
|
21
|
-
end
|
22
|
-
end
|
23
|
-
it "should have logger" do
|
24
|
-
Socky.logger.should_not be_nil
|
25
|
-
Socky.logger.class.should eql(Logger)
|
26
|
-
end
|
27
|
-
it "should have logger with STDOUT at default" do
|
28
|
-
Socky.logger.instance_variable_get('@logdev').dev.class.should eql(IO)
|
29
|
-
end
|
30
|
-
it "should be able to set logger" do
|
31
|
-
begin
|
32
|
-
logger = Logger.new(STDOUT)
|
33
|
-
Socky.logger.should_not equal(logger)
|
34
|
-
Socky.logger = logger
|
35
|
-
Socky.logger.should equal(logger)
|
36
|
-
ensure
|
37
|
-
Socky.logger = nil
|
38
|
-
end
|
39
|
-
end
|
40
|
-
it "should be able to change verbosity of logger by setting debug option" do
|
41
|
-
begin
|
42
|
-
Socky.logger.level.should eql(Logger::INFO)
|
43
|
-
Socky.logger = nil
|
44
|
-
Socky.stub!(:options).and_return({:debug => true})
|
45
|
-
Socky.logger.level.should eql(Logger::DEBUG)
|
46
|
-
Socky.logger = nil
|
47
|
-
Socky.stub!(:options).and_return({:debug => false})
|
48
|
-
Socky.logger.level.should eql(Logger::INFO)
|
49
|
-
ensure
|
50
|
-
Socky.logger = nil
|
51
|
-
end
|
52
|
-
end
|
53
|
-
it "should not have default log path" do
|
54
|
-
Socky.log_path.should be_nil
|
55
|
-
end
|
56
|
-
it "should be able to change log path by settion log_path option" do
|
57
|
-
Socky.stub!(:options).and_return({:log_path => "abstract"})
|
58
|
-
Socky.log_path.should eql("abstract")
|
59
|
-
end
|
60
|
-
it "should be able to change logger write place" do
|
61
|
-
begin
|
62
|
-
Socky.options = {:log_path => File.join(File.dirname(__FILE__), 'files', 'socky.log')}
|
63
|
-
Socky.logger.should_not be_nil
|
64
|
-
Socky.logger.instance_variable_get('@logdev').dev.class.should eql(File)
|
65
|
-
ensure
|
66
|
-
Socky.logger = nil
|
67
|
-
Socky.options = {}
|
68
|
-
end
|
69
|
-
end
|
70
|
-
it "should have default pid path" do
|
71
|
-
Socky.pid_path.should_not be_nil
|
72
|
-
Socky.pid_path.should eql("/var/run/socky.pid")
|
73
|
-
end
|
74
|
-
it "should be able to change pid path by settion pid_path option" do
|
75
|
-
Socky.stub!(:options).and_return({:pid_path => "abstract"})
|
76
|
-
Socky.pid_path.should eql("abstract")
|
77
|
-
end
|
78
|
-
it "should have default config path" do
|
79
|
-
Socky.config_path.should_not be_nil
|
80
|
-
Socky.config_path.should eql("/var/run/socky.yml")
|
81
|
-
end
|
82
|
-
it "should be able to change config path by settion config_path option" do
|
83
|
-
Socky.stub!(:options).and_return({:config_path => "abstract"})
|
84
|
-
Socky.config_path.should eql("abstract")
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
data/spec/support/stallion.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
# #--
|
2
|
-
# Includes portion originally Copyright (C)2008 Michael Fellinger
|
3
|
-
# license See file LICENSE for details
|
4
|
-
# #--
|
5
|
-
|
6
|
-
require 'rack'
|
7
|
-
|
8
|
-
module Stallion
|
9
|
-
class Mount
|
10
|
-
def initialize(name, *methods, &block)
|
11
|
-
@name, @methods, @block = name, methods, block
|
12
|
-
end
|
13
|
-
|
14
|
-
def ride
|
15
|
-
@block.call
|
16
|
-
end
|
17
|
-
|
18
|
-
def match?(request)
|
19
|
-
method = request['REQUEST_METHOD']
|
20
|
-
right_method = @methods.empty? or @methods.include?(method)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class Stable
|
25
|
-
attr_reader :request, :response
|
26
|
-
|
27
|
-
def initialize
|
28
|
-
@boxes = {}
|
29
|
-
end
|
30
|
-
|
31
|
-
def in(path, *methods, &block)
|
32
|
-
mount = Mount.new(path, *methods, &block)
|
33
|
-
@boxes[[path, methods]] = mount
|
34
|
-
mount
|
35
|
-
end
|
36
|
-
|
37
|
-
def call(request, response)
|
38
|
-
@request, @response = request, response
|
39
|
-
@boxes.each do |(path, methods), mount|
|
40
|
-
if mount.match?(request)
|
41
|
-
mount.ride
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
STABLES = {}
|
48
|
-
|
49
|
-
def self.saddle(name = nil)
|
50
|
-
STABLES[name] = stable = Stable.new
|
51
|
-
yield stable
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.run(options = {})
|
55
|
-
options = {:Host => "127.0.0.1", :Port => 8080}.merge(options)
|
56
|
-
Rack::Handler::Mongrel.run(Rack::Lint.new(self), options)
|
57
|
-
end
|
58
|
-
|
59
|
-
def self.call(env)
|
60
|
-
request = Rack::Request.new(env)
|
61
|
-
response = Rack::Response.new
|
62
|
-
|
63
|
-
STABLES.each do |name, stable|
|
64
|
-
stable.call(request, response)
|
65
|
-
end
|
66
|
-
|
67
|
-
response.finish
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
Stallion.saddle :spec do |stable|
|
72
|
-
stable.in '/' do
|
73
|
-
|
74
|
-
if stable.request.path_info == '/fail'
|
75
|
-
stable.response.status = 404
|
76
|
-
|
77
|
-
elsif stable.request.path_info == '/timeout'
|
78
|
-
sleep(10)
|
79
|
-
stable.response.write 'timeout'
|
80
|
-
|
81
|
-
elsif
|
82
|
-
stable.response.write 'Hello, World!'
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
Thread.new do
|
89
|
-
begin
|
90
|
-
Stallion.run :Host => '127.0.0.1', :Port => 8765
|
91
|
-
rescue Exception => e
|
92
|
-
print e
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
sleep(1)
|